Sfoglia il codice sorgente

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

liujc 1 anno fa
parent
commit
11aa2e2df5
17 ha cambiato i file con 232 aggiunte e 169 eliminazioni
  1. 72 68
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java
  2. 30 14
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java
  3. 3 2
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java
  4. 1 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java
  5. 1 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/enums/EClientType.java
  6. 2 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  7. 6 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java
  8. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TeacherSubmitReq.java
  9. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ClientEnum.java
  10. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  11. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantActivationCodeService.java
  12. 22 73
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  13. 63 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  14. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  15. 17 0
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java
  16. 1 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java
  17. 1 4
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java

+ 72 - 68
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java

@@ -55,6 +55,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 javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
@@ -69,7 +70,7 @@ import java.util.stream.Collectors;
 @Api(value = "教师表", tags = "教师表")
 public class TeacherController extends BaseController {
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private TeacherService teacherService;
@@ -115,37 +116,37 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "查询分页", notes = "传入teacher")
     @PreAuthorize("@pcs.hasPermissions('teacher/page')")
     public HttpResponseResult<PageInfo<TeacherVo>> page(@RequestBody TeacherSearch query) {
-    	
-    	if(StringUtils.isNotBlank(query.getUserStatus())){
-    		switch (query.getUserStatus()) {
-			case "LOCKED":
-				query.setDelFlag(YesOrNoEnum.NO);
-				query.setLockFlag(UserLockFlag.LOCKED);
-				break;
-			case "CLOSED":
-				query.setDelFlag(YesOrNoEnum.YES);
-				break;
-
-			default:
-				query.setDelFlag(YesOrNoEnum.NO);
-				query.setLockFlag(UserLockFlag.NORMAL);
-				break;
-			}
-    	}
+
+        if(StringUtils.isNotBlank(query.getUserStatus())){
+            switch (query.getUserStatus()) {
+                case "LOCKED":
+                    query.setDelFlag(YesOrNoEnum.NO);
+                    query.setLockFlag(UserLockFlag.LOCKED);
+                    break;
+                case "CLOSED":
+                    query.setDelFlag(YesOrNoEnum.YES);
+                    break;
+
+                default:
+                    query.setDelFlag(YesOrNoEnum.NO);
+                    query.setLockFlag(UserLockFlag.NORMAL);
+                    break;
+            }
+        }
         IPage<TeacherVo> pages = teacherService.selectPage(PageUtil.getPage(query), query);
-		List<TeacherVo> rows = pages.getRecords();
-		
-		for(TeacherVo vo : rows){
-			if(vo.getDelFlag() == YesOrNoEnum.YES){
-				vo.setUserStatus(UserStatusEnum.CLOSED);
-			}else{
-				if(vo.getLockFlag() == UserLockFlag.LOCKED){
-					vo.setUserStatus(UserStatusEnum.LOCKED);
-				}else{
-					vo.setUserStatus(UserStatusEnum.NORMAL);
-				}
-			}
-		}
+        List<TeacherVo> rows = pages.getRecords();
+
+        for(TeacherVo vo : rows){
+            if(vo.getDelFlag() == YesOrNoEnum.YES){
+                vo.setUserStatus(UserStatusEnum.CLOSED);
+            }else{
+                if(vo.getLockFlag() == UserLockFlag.LOCKED){
+                    vo.setUserStatus(UserStatusEnum.LOCKED);
+                }else{
+                    vo.setUserStatus(UserStatusEnum.NORMAL);
+                }
+            }
+        }
         return succeed(PageUtil.pageInfo(pages));
     }
 
@@ -156,6 +157,8 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "新增或修改", notes = "传入teacher")
     @PreAuthorize("@pcs.hasPermissions('teacher/submit')")
     public HttpResponseResult<Boolean> submit(@Valid @RequestBody TeacherSubmitReq teacherSubmitReq) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        teacherSubmitReq.setUpdateBy(sysUser.getId());
         return teacherService.submit(teacherSubmitReq);
     }
 
@@ -163,7 +166,8 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "新增或修改", notes = "传入teacher")
     @PreAuthorize("@pcs.hasPermissions('teacher/updateTenant')")
     public HttpResponseResult<Boolean> updateTenant(@Valid @RequestBody TeacherWrapper.UpdateTenant updateTenant) {
-        teacherService.updateTenant(updateTenant);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        teacherService.updateTenant(updateTenant,sysUser.getId());
         return succeed();
     }
 
@@ -173,43 +177,43 @@ public class TeacherController extends BaseController {
     public void export(HttpServletResponse response, @RequestBody TeacherSearch queryInfo) throws IOException {
         queryInfo.setPage(1);
         queryInfo.setRows(49999);
-    	
-    	if(StringUtils.isNotBlank(queryInfo.getUserStatus())){
-    		switch (queryInfo.getUserStatus()) {
-			case "LOCKED":
-				queryInfo.setDelFlag(YesOrNoEnum.NO);
-				queryInfo.setLockFlag(UserLockFlag.LOCKED);
-				break;
-			case "CLOSED":
-				queryInfo.setDelFlag(YesOrNoEnum.YES);
-				break;
-
-			default:
-				queryInfo.setDelFlag(YesOrNoEnum.NO);
-				queryInfo.setLockFlag(UserLockFlag.NORMAL);
-				break;
-			}
-    	}
+
+        if (StringUtils.isNotBlank(queryInfo.getUserStatus())) {
+            switch (queryInfo.getUserStatus()) {
+                case "LOCKED":
+                    queryInfo.setDelFlag(YesOrNoEnum.NO);
+                    queryInfo.setLockFlag(UserLockFlag.LOCKED);
+                    break;
+                case "CLOSED":
+                    queryInfo.setDelFlag(YesOrNoEnum.YES);
+                    break;
+
+                default:
+                    queryInfo.setDelFlag(YesOrNoEnum.NO);
+                    queryInfo.setLockFlag(UserLockFlag.NORMAL);
+                    break;
+            }
+        }
         List<TeacherVo> rows = teacherService.selectPage(PageUtil.getPage(queryInfo), queryInfo).getRecords();
         if (rows.size() < 1) {
             throw new BizException("没有可导出数据");
         }
-		
-		for(TeacherVo vo : rows){
-			if(vo.getDelFlag() == YesOrNoEnum.YES){
-				vo.setUserStatus(UserStatusEnum.CLOSED);
-			}else{
-				if(vo.getLockFlag() == UserLockFlag.LOCKED){
-					vo.setUserStatus(UserStatusEnum.LOCKED);
-				}else{
-					vo.setUserStatus(UserStatusEnum.NORMAL);
-				}
-			}
-		}
+
+        for(TeacherVo vo : rows){
+            if(vo.getDelFlag() == YesOrNoEnum.YES){
+                vo.setUserStatus(UserStatusEnum.CLOSED);
+            }else{
+                if(vo.getLockFlag() == UserLockFlag.LOCKED){
+                    vo.setUserStatus(UserStatusEnum.LOCKED);
+                }else{
+                    vo.setUserStatus(UserStatusEnum.NORMAL);
+                }
+            }
+        }
         for(TeacherVo vo : rows){
-        	if(StringUtils.isNotBlank(vo.getTag())){
-        		vo.setTag(vo.getTag().replace("STYLE", "个人风采").replace("LIVE", "直播课").replace("VIDEO", "视频课").replace("MUSIC", "乐谱").replace("DEGREE", "学历").replace("TEACHER", "教资"));
-        	}
+            if(StringUtils.isNotBlank(vo.getTag())){
+                vo.setTag(vo.getTag().replace("STYLE", "个人风采").replace("LIVE", "直播课").replace("VIDEO", "视频课").replace("MUSIC", "乐谱").replace("DEGREE", "学历").replace("TEACHER", "教资"));
+            }
         }
         OutputStream outputStream = response.getOutputStream();
         try {
@@ -277,10 +281,10 @@ public class TeacherController extends BaseController {
     // @PreAuthorize("@pcs.hasPermissions('teacher/bindingUserList')")
     public HttpResponseResult<PageInfo<TeacherBindingUserVo.BindingUserList>> bindingUserList(@RequestBody  @Valid  TeacherBindingUserVo.BindingUserQuery query) {
         IPage<UserBindingTeacherWrapper> wrapperIPage = userBindingTeacherService.selectBindingUserPage(PageUtil.getPage(query),
-                                                        TeacherBindingUserQueryInfo.BindingUserQuery.from(query.jsonString()));
+                TeacherBindingUserQueryInfo.BindingUserQuery.from(query.jsonString()));
         // 数据转换
         List<TeacherBindingUserVo.BindingUserList> pageInfos = JSON.parseArray(JSON.toJSONString(wrapperIPage.getRecords()),
-                                                                               TeacherBindingUserVo.BindingUserList.class);
+                TeacherBindingUserVo.BindingUserList.class);
 
         return succeed(PageUtil.getPageInfo(wrapperIPage,pageInfos));
     }
@@ -291,10 +295,10 @@ public class TeacherController extends BaseController {
     // @PreAuthorize("@pcs.hasPermissions('teacher/selectBindingUserCourse')")
     public HttpResponseResult<PageInfo<TeacherBindingUserVo.BindingStudentCourseList>> selectBindingUserCourse(@RequestBody @Valid TeacherBindingUserVo.BindingStudentCourseQuery query) {
         IPage<UserBindingCourseWrapper> wrapperIPage = userBindingTeacherService.selectBindingUserCoursePage(PageUtil.getPage(query),
-                                                                                                             TeacherBindingUserQueryInfo.BindingStudentCourseQuery.from(query.jsonString()));
+                TeacherBindingUserQueryInfo.BindingStudentCourseQuery.from(query.jsonString()));
         // 数据转换
         List<TeacherBindingUserVo.BindingStudentCourseList> pageInfos = JSON.parseArray(JSON.toJSONString(wrapperIPage.getRecords()),
-                                                                                        TeacherBindingUserVo.BindingStudentCourseList.class);
+                TeacherBindingUserVo.BindingStudentCourseList.class);
 
         return succeed(PageUtil.getPageInfo(wrapperIPage, pageInfos));
     }

+ 30 - 14
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java

@@ -139,6 +139,24 @@ public class TenantActivationCodeController extends BaseController {
         return succeed();
     }
 
+
+    @ApiOperation(value = "激活码重发", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCodeSend")
+    @PostMapping("/resend")
+    public HttpResponseResult<Boolean> resend(@Validated @RequestBody TenantActivationCodeVo.TenantActivationCodeResend send) {
+        TenantInfo tenantInfo = getTenantInfo();
+        tenantActivationCodeService.resend(send.getCode(),send.getUserId(),tenantInfo.getId(),send.getTenantAlbumPurchaseId());
+        return succeed();
+    }
+
+    @ApiOperation(value = "激活码批量重发", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCodeSend")
+    @PostMapping("/batchResend")
+    public HttpResponseResult<Boolean> batchResend(@Validated @RequestBody TenantActivationCodeVo.TenantActivationCodeSend send) {
+        TenantInfo tenantInfo = getTenantInfo();
+        tenantActivationCodeService.batchResend(tenantInfo, send.getTenantAlbumPurchaseId(),
+                send.getActivationCodeList(), send.getStudentIdList());
+        return succeed();
+    }
+
     @ApiOperation(value = "激活码发放取消", notes = "传入 激活码的ID")
     @PostMapping("/sendCancel")
     public HttpResponseResult<Boolean> sendCancel(@RequestParam("id") Long id) {
@@ -160,6 +178,14 @@ public class TenantActivationCodeController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "批量激活码发放取消", notes = "传入 激活码的ID")
+    @PostMapping("/batchSendCancel")
+    public HttpResponseResult<Boolean> batchSendCancel(@RequestParam("ids") String ids) {
+        TenantInfo tenantInfo = getTenantInfo();
+        tenantActivationCodeService.batchSendCancel(tenantInfo, ids);
+        return succeed();
+    }
+
     @GetMapping("/exportActiveCode")
     @ApiOperation(value = "导出模板")
     public HttpResponseResult<TenantActivationCodeWrapper.ExportFile> exportActiveCode(HttpServletResponse response, String orderNo) {
@@ -175,6 +201,7 @@ public class TenantActivationCodeController extends BaseController {
         query.setActivationStatus(false);
         query.setTenantAlbumPurchaseId(Long.valueOf(orderNo));
         query.setSendStatus(EActivationCode.WAIT);
+        query.setActivationStatus(false);
         query.setPage(1);
         query.setRows(9999);
         IPage<TenantActivationCodeWrapper.TenantActivationCode> queryInfo =
@@ -185,18 +212,17 @@ public class TenantActivationCodeController extends BaseController {
         }
 
         List<TenantActivationCodeWrapper.ExportTemplate> templates = JSONArray.parseArray(JSON.toJSONString(rows), TenantActivationCodeWrapper.ExportTemplate.class);
-
+        templates.forEach(next->next.setActivationPhone(""));
 
         TenantActivationCodeWrapper.ExportFile exportFile = generateExportExcelFile(templates, TenantActivationCodeWrapper.ExportTemplate.class, "激活码导出", "激活码");
         return succeed(exportFile);
     }
 
 
-
     private TenantActivationCodeWrapper.ExportFile generateExportExcelFile(List<?> orderExports, Class<?> clazz, String fileName, String sheetName) {
 
         // OSS上传文件目录
-        String uploadOssPath = MessageFormat.format("excel-download/{0}", org.joda.time.DateTime.now().toString("yyyy-MM"));
+        String uploadOssPath = MessageFormat.format("excel-download/{0}", DateTime.now().toString("yyyy-MM"));
 
         // 文件上传下载地址
         String uploadPath = MessageFormat.format("{0}/{1}-{2}.xlsx", uploadOssPath, String.valueOf(IdWorker.getId()), DateTime.now().toString("MMddHHmmss"));
@@ -232,7 +258,6 @@ public class TenantActivationCodeController extends BaseController {
 
 
 
-
     @GetMapping("/exportOrderCode")
     @ApiOperation(value = "导出订单激活码模板")
     public HttpResponseResult<TenantActivationCodeWrapper.ExportFile> exportOrderCode(HttpServletResponse response, String orderNo) {
@@ -262,6 +287,7 @@ public class TenantActivationCodeController extends BaseController {
         TenantActivationCodeWrapper.ExportFile exportFile = generateExportExcelFile(templates, TenantActivationCodeWrapper.ExportTemplate.class, "激活码导出", "激活码");
         return succeed(exportFile);
     }
+
     @PostMapping("/importActiveCode")
     @ApiOperation(value = "导入", notes = "传入file")
     public HttpResponseResult<List<ErrMsg>> importActiveCode(
@@ -328,14 +354,4 @@ public class TenantActivationCodeController extends BaseController {
         }
         return tenantInfo;
     }
-
-
-
-    @ApiOperation(value = "激活码重发", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCodeSend")
-    @PostMapping("/resend")
-    public HttpResponseResult<Boolean> resend(@Validated @RequestBody TenantActivationCodeVo.TenantActivationCodeResend send) {
-        TenantInfo tenantInfo = getTenantInfo();
-        tenantActivationCodeService.resend(send.getCode(),send.getUserId(),tenantInfo.getId(),send.getTenantAlbumPurchaseId());
-        return succeed();
-    }
 }

+ 3 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java

@@ -49,6 +49,7 @@ import java.util.stream.Collectors;
 @RequestMapping("${app-config.url.tenant:}/tenantInfoUpdate")
 @Api(value = "机构信息修改", tags = "机构信息修改")
 public class TenantInfoController extends BaseController {
+
     @Autowired
     TenantInfoService tenantInfoService;
 
@@ -229,7 +230,7 @@ public class TenantInfoController extends BaseController {
                 newSysUser.setUpdateTime(LocalDateTime.now());
                 if (StringUtils.isBlank(newSysUser.getAvatar())) {
                     // 使用默认用户头像
-                    newSysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD));
+                    newSysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.TEACHER_AVATAR));
                 }
                 // 锁定状态
                 newSysUser.setLockFlag(0);
@@ -272,7 +273,7 @@ public class TenantInfoController extends BaseController {
         } else {
 
             // 修改用户基础信息流程
-            //设置默认头像
+            // 更新用户头象
             com.yonge.cooleshow.biz.dal.entity.SysUser updateSysUser = new com.yonge.cooleshow.biz.dal.entity.SysUser();
             updateSysUser.setId(user.getId());
             // 用户昵称

+ 1 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java

@@ -70,9 +70,6 @@ public class OpenStudentController extends BaseController {
     @Autowired
     private ImGroupMemberService imGroupMemberService;
 
-    @Autowired
-    private SysConfigService sysConfigService;
-
     @PostMapping("/save")
     @ApiOperation(value = "新增/修改", notes = "传入Student,换绑时按照返回错误码5004判断,是否需要换绑,updateTenant=true表示换绑")
     public HttpResponseResult<Boolean> save(@Validated @RequestBody StudentVo.Student student) {
@@ -95,7 +92,7 @@ public class OpenStudentController extends BaseController {
 
         if (studentId == null) {
             SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
-            if (sysUser != null) {
+            if (sysUser != null && sysUser.getUserType().contains(ClientEnum.STUDENT.getCode())) {
                 studentId = sysUser.getId();
             }
         }

+ 1 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/enums/EClientType.java

@@ -12,6 +12,7 @@ public enum EClientType implements BaseEnum<String, EClientType> {
     TEACHER("老师端"),
     STUDENT("学生端"),
     TENANT_STUDENT("机构-学生端"),
+    ORGANIZATION("机构-小程序"),
     SYSTEM("平台端"),
     WEBSITE("官网"),
     ;

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

@@ -48,6 +48,7 @@ import java.io.IOException;
 import java.text.MessageFormat;
 import java.util.Base64;
 import java.util.Calendar;
+import java.util.Locale;
 import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
@@ -110,6 +111,7 @@ public class TokenController extends BaseController {
     public Object apiQueryUserInfo(@RequestParam(value = "clientType", required = false, defaultValue = "TEACHER") String clientType) {
 
         // 校验客户端类型
+        clientType = clientType.toUpperCase(Locale.ENGLISH);
         if (EClientType.invalid(clientType)) {
             return failed("无效的客户端类型");
         }

+ 6 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java

@@ -55,6 +55,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 javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
@@ -69,7 +70,7 @@ import java.util.stream.Collectors;
 @Api(value = "教师表", tags = "教师表")
 public class TeacherController extends BaseController {
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private TeacherService teacherService;
@@ -156,6 +157,8 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "新增或修改", notes = "传入teacher")
     @PreAuthorize("@pcs.hasPermissions('teacher/submit')")
     public HttpResponseResult<Boolean> submit(@Valid @RequestBody TeacherSubmitReq teacherSubmitReq) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        teacherSubmitReq.setUpdateBy(sysUser.getId());
         return teacherService.submit(teacherSubmitReq);
     }
 
@@ -163,7 +166,8 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "新增或修改", notes = "传入teacher")
     @PreAuthorize("@pcs.hasPermissions('teacher/updateTenant')")
     public HttpResponseResult<Boolean> updateTenant(@Valid @RequestBody TeacherWrapper.UpdateTenant updateTenant) {
-        teacherService.updateTenant(updateTenant);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        teacherService.updateTenant(updateTenant,sysUser.getId());
         return succeed();
     }
 

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

@@ -62,6 +62,9 @@ public class TeacherSubmitReq implements Serializable {
     @ApiModelProperty("老师头像")
     private String avatar;
 
+    @ApiModelProperty(value = "后台修改人",hidden = true)
+    private Long updateBy;
+
     public Long getUserId() {
         return userId;
     }

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

@@ -13,6 +13,7 @@ public enum ClientEnum implements BaseEnum<String, ClientEnum> {
     TEACHER("老师端"),
     STUDENT("学生端"),
     TENANT_STUDENT("机构-学生端"),
+    ORGANIZATION("机构-小程序"),
     SYSTEM("平台端"),
     WEBSITE("官网"),
     TENANT("机构端"),

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

@@ -176,7 +176,7 @@ public interface TeacherService extends IService<Teacher> {
      */
     TeacherWrapper.TeacherStatInfo findTeacherStatInfoById(Long userId);
 
-    void updateTenant(TeacherWrapper.UpdateTenant updateTenant);
+    void updateTenant(TeacherWrapper.UpdateTenant updateTenant,Long userId);
 
     Long teacherSettlementFrom(Long teacherId);
 }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantActivationCodeService.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
@@ -77,4 +78,8 @@ public interface TenantActivationCodeService extends IService<TenantActivationCo
     void activeById(String id, Long userId);
 
     void resend(String code, Long userId, Long tenantId, Long tenantAlbumPurchaseId);
+
+    void batchSendCancel(TenantInfo tenantInfo, String ids);
+
+    void batchResend(TenantInfo tenantInfo, Long tenantAlbumPurchaseId, List<String> activationCodeList, List<Long> studentIdList);
 }

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

@@ -1,41 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
-import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumRefMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindHistoryMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
-import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
-import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.vo.MusicSheetUploadCountVo;
-import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
-import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
-import com.yonge.cooleshow.common.enums.ESettlementFrom;
-import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
-import com.yonge.cooleshow.common.enums.UserFirstTimeTypeEnum;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
-import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.base.util.StringUtil;
-import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
-import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
-import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
-import com.yonge.toolset.utils.string.ValueUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.redisson.api.RMap;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-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;
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -50,20 +15,7 @@ import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.dto.TeacherDto;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
-import com.yonge.cooleshow.biz.dal.entity.ImGroup;
-import com.yonge.cooleshow.biz.dal.entity.Student;
-import com.yonge.cooleshow.biz.dal.entity.StudentStar;
-import com.yonge.cooleshow.biz.dal.entity.Subject;
-import com.yonge.cooleshow.biz.dal.entity.Teacher;
-import com.yonge.cooleshow.biz.dal.entity.TeacherAuthMusicianRecord;
-import com.yonge.cooleshow.biz.dal.entity.TeacherStyleVideo;
-import com.yonge.cooleshow.biz.dal.entity.TeacherTotal;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbum;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbumRef;
-import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
-import com.yonge.cooleshow.biz.dal.entity.TenantUnbindHistory;
-import com.yonge.cooleshow.biz.dal.entity.TenantUnbindRecord;
-import com.yonge.cooleshow.biz.dal.entity.UserAccount;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
@@ -75,24 +27,7 @@ import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumRefMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindHistoryMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
 import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
-import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
-import com.yonge.cooleshow.biz.dal.service.ImGroupService;
-import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
-import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.service.StudentStarService;
-import com.yonge.cooleshow.biz.dal.service.SubjectService;
-import com.yonge.cooleshow.biz.dal.service.SysConfigService;
-import com.yonge.cooleshow.biz.dal.service.SysMessageService;
-import com.yonge.cooleshow.biz.dal.service.TeacherAuthEntryRecordService;
-import com.yonge.cooleshow.biz.dal.service.TeacherAuthMusicianRecordService;
-import com.yonge.cooleshow.biz.dal.service.TeacherService;
-import com.yonge.cooleshow.biz.dal.service.TeacherStyleVideoService;
-import com.yonge.cooleshow.biz.dal.service.TeacherTotalService;
-import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
-import com.yonge.cooleshow.biz.dal.service.UserAccountService;
-import com.yonge.cooleshow.biz.dal.service.UserFirstTimeService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.service.im.ImGroupCoreService;
 import com.yonge.cooleshow.biz.dal.vo.HotTeacherVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetUploadCountVo;
@@ -129,6 +64,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
@@ -150,13 +86,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
     @Autowired
     private TeacherStyleVideoService teacherStyleVideoService;
-    @Autowired
+    @Resource
     private SysUserFeignService userFeignService;
     @Autowired
     private TeacherAuthEntryRecordService entryRecordService;
     @Autowired
     private TeacherAuthMusicianRecordService musicianRecordService;
-    @Autowired
+    @Resource
     private EmployeeDao employeeDao;
     @Autowired
     private RedissonClient redissonClient;
@@ -216,10 +152,11 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     private SmsCodeService smsCodeService;
 
     @Autowired
-    private ImGroupCoreService imGroupCoreService;
+    private RealnameAuthenticationPlugin realnameAuthenticationPlugin;
 
     @Autowired
-    private RealnameAuthenticationPlugin realnameAuthenticationPlugin;
+    private ImGroupCoreService imGroupCoreService;
+
 
     @Override
     public TeacherVo detail(Long userId) {
@@ -474,6 +411,16 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         //新增修改老师表
         Teacher teacher = insertOrUpdateTeacher(teacherSubmitReq);
 
+        // 机构老师与学生互加好友关系
+        if (Optional.ofNullable(teacher.getTenantId()).orElse(-1L) > 0) {
+            // 自动与机构老师成为好友
+            Set<Long> collect = studentService.lambdaQuery()
+                    .eq(Student::getTenantId, teacher.getTenantId()).list().stream()
+                    .map(Student::getUserId).collect(Collectors.toSet());
+
+            imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
+        }
+
         return HttpResponseResult.succeed(true);
     }
 
@@ -581,7 +528,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 TeacherWrapper.UpdateTenant updateTenant = new TeacherWrapper.UpdateTenant();
                 updateTenant.setTeacherId(teacher.getUserId());
                 updateTenant.setTenantId(teacherSubmitReq.getTenantId());
-                updateTenant(updateTenant);
+                updateTenant(updateTenant, teacherSubmitReq.getUpdateBy());
             }
 
             teacher.setUpdateTime(new Date());
@@ -1032,7 +979,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
 //    @Transactional(rollbackFor = Exception.class)
     @Override
-    public void updateTenant(TeacherWrapper.UpdateTenant updateTenant) {
+    public void updateTenant(TeacherWrapper.UpdateTenant updateTenant,Long userId) {
         Teacher teacher = this.getById(updateTenant.getTeacherId());
         if (teacher.getTenantId().equals(updateTenant.getTenantId())) {
             return;
@@ -1085,6 +1032,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             TenantUnbindRecord tenantUnbindRecord = first.get();
             tenantUnbindRecord.setStatus(ETenantUnBindAuditStatus.CLOSE);
             tenantUnbindRecord.setReason("机构发生变更,关闭申请");
+            tenantUnbindRecord.setVerifyUserId(userId);
+            tenantUnbindRecord.setInterveneTime(new Date());
             tenantUnbindRecordMapper.updateById(tenantUnbindRecord);
 
             TenantUnbindHistory history = JSON.parseObject(JSON.toJSONString(tenantUnbindRecord),

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

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
 import com.yonge.cooleshow.biz.dal.entity.TenantAlbumPurchase;
+import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.entity.UserTenantAlbumRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
@@ -304,6 +305,68 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         this.updateById(one);
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void batchSendCancel(TenantInfo tenantInfo, String ids) {
+        List<Long> idList = Arrays.stream(ids.split(",")).map(Long::valueOf).distinct().collect(Collectors.toList());
+        Collection<TenantActivationCode> tenantActivationCodes = this.listByIds(idList);
+        for (TenantActivationCode tenantActivationCode : tenantActivationCodes) {
+            if (Boolean.TRUE.equals(tenantActivationCode.getActivationStatus())) {
+                throw new BizException("激活码已经被使用");
+            }
+        }
+        tenantActivationCodes.removeIf(next -> Boolean.TRUE.equals(next.getActivationStatus()));
+        if (tenantActivationCodes.isEmpty()) {
+            throw new BizException("无可撤回的激活码");
+        }
+
+        this.lambdaUpdate()
+                .set(TenantActivationCode::getSendStatus, EActivationCode.WAIT)
+                .set(TenantActivationCode::getActivationPhone, "")
+                .in(TenantActivationCode::getId, idList)
+                .eq(TenantActivationCode::getActivationStatus, false)
+                .eq(TenantActivationCode::getSendStatus, EActivationCode.SEND)
+                .update();
+
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void batchResend(TenantInfo tenantInfo, Long tenantAlbumPurchaseId, List<String> activationCodeList,
+                            List<Long> studentIdList) {
+
+        if (CollectionUtils.isEmpty(studentIdList)) {
+            throw new BizException("学生列表不能为空");
+        }
+
+        QueryWrapper<TenantActivationCode> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda()
+                .eq(TenantActivationCode::getTenantId, tenantInfo.getId())
+                .eq(TenantActivationCode::getTenantAlbumPurchaseId, tenantAlbumPurchaseId)
+                .eq(TenantActivationCode::getActivationStatus, false)
+                .in(CollectionUtils.isNotEmpty(activationCodeList), TenantActivationCode::getActivationCode,
+                        activationCodeList);
+        List<TenantActivationCode> activationCodes = this.list(queryWrapper);
+        if (activationCodes.isEmpty()) {
+            throw new BizException("无可重发的激活码");
+        }
+        if (activationCodes.size() < studentIdList.size()) {
+            throw new BizException("可发激活码的数量小于学生的数量");
+        }
+
+        List<SysUser> sysUsers = sysUserMapper.selectBatchIds(studentIdList);
+        Map<Long, String> mapPhoneById = sysUsers.stream().collect(Collectors.toMap(SysUser::getId, SysUser::getPhone));
+
+        List<TenantActivationCode> updates = new ArrayList<>();
+        for (int i = 0; i < studentIdList.size(); i++) {
+            TenantActivationCode tenantActivationCode = activationCodes.get(i);
+            tenantActivationCode.setSendStatus(EActivationCode.SEND);
+            tenantActivationCode.setActivationPhone(mapPhoneById.getOrDefault(studentIdList.get(i), ""));
+            updates.add(tenantActivationCode);
+        }
+        this.updateBatchById(updates);
+    }
+
 
     /**
      * 添加用户机构专辑激活记录

+ 3 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -409,6 +409,9 @@
 		from student st
 		LEFT JOIN sys_music_compare_record smcr ON smcr.user_id_ = st.user_id_
 		<where>
+			<if test="queryInfo.clientId != null and queryInfo.clientId!= ''">
+				AND smcr.client_id_ = #{queryInfo.clientId}
+			</if>
 			<if test="queryInfo.startTime != null and queryInfo.startTime != ''">
 				AND smcr.create_time_ BETWEEN #{queryInfo.startTime} AND #{queryInfo.endTime}
 			</if>

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

@@ -149,6 +149,15 @@ public class TenantActivationCodeController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "激活码批量重发", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCodeSend")
+    @PostMapping("/batchResend")
+    public HttpResponseResult<Boolean> batchResend(@Validated @RequestBody TenantActivationCodeVo.TenantActivationCodeSend send) {
+        TenantInfo tenantInfo = getTenantInfo();
+        tenantActivationCodeService.batchResend(tenantInfo, send.getTenantAlbumPurchaseId(),
+                send.getActivationCodeList(), send.getStudentIdList());
+        return succeed();
+    }
+
     @ApiOperation(value = "激活码发放取消", notes = "传入 激活码的ID")
     @PostMapping("/sendCancel")
     public HttpResponseResult<Boolean> sendCancel(@RequestParam("id") Long id) {
@@ -170,6 +179,14 @@ public class TenantActivationCodeController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "批量激活码发放取消", notes = "传入 激活码的ID")
+    @PostMapping("/batchSendCancel")
+    public HttpResponseResult<Boolean> batchSendCancel(@RequestParam("ids") String ids) {
+        TenantInfo tenantInfo = getTenantInfo();
+        tenantActivationCodeService.batchSendCancel(tenantInfo, ids);
+        return succeed();
+    }
+
     @GetMapping("/exportActiveCode")
     @ApiOperation(value = "导出模板")
     public HttpResponseResult<TenantActivationCodeWrapper.ExportFile> exportActiveCode(HttpServletResponse response, String orderNo) {

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

@@ -230,7 +230,7 @@ public class TenantInfoController extends BaseController {
                 newSysUser.setUpdateTime(LocalDateTime.now());
                 if (StringUtils.isBlank(newSysUser.getAvatar())) {
                     // 使用默认用户头像
-                    newSysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD));
+                    newSysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.TEACHER_AVATAR));
                 }
                 // 锁定状态
                 newSysUser.setLockFlag(0);

+ 1 - 4
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java

@@ -70,9 +70,6 @@ public class OpenStudentController extends BaseController {
     @Autowired
     private ImGroupMemberService imGroupMemberService;
 
-    @Autowired
-    private SysConfigService sysConfigService;
-
     @PostMapping("/save")
     @ApiOperation(value = "新增/修改", notes = "传入Student,换绑时按照返回错误码5004判断,是否需要换绑,updateTenant=true表示换绑")
     public HttpResponseResult<Boolean> save(@Validated @RequestBody StudentVo.Student student) {
@@ -95,7 +92,7 @@ public class OpenStudentController extends BaseController {
 
         if (studentId == null) {
             SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
-            if (sysUser != null) {
+            if (sysUser != null && sysUser.getUserType().contains(ClientEnum.STUDENT.getCode())) {
                 studentId = sysUser.getId();
             }
         }