Selaa lähdekoodia

Merge branch 'feature/0721-tenant' into develop

# Conflicts:
#	cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
yuanliang 1 vuosi sitten
vanhempi
commit
5c9c02d3cf

+ 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 - 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 - 74
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;
@@ -102,7 +37,6 @@ import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.biz.dal.wordfilter.WordFilter;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
-import com.yonge.cooleshow.biz.dal.wrapper.im.ImGroupWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -129,6 +63,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 +85,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 +151,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 +410,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 +527,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 +978,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 +1031,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);
+    }
+
 
     /**
      * 添加用户机构专辑激活记录

+ 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();
             }
         }