yuanliang 2 лет назад
Родитель
Сommit
c1d67cc44e

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

@@ -42,7 +42,7 @@ import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/tenantAlbum")
-@Api(value = "机构管理", tags = "机构管理")
+@Api(value = "机构专辑管理", tags = "机构专辑管理")
 public class TenantAlbumController {
     @Autowired
     TenantAlbumService tenantAlbumService;

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

@@ -102,7 +102,9 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
     public void create(ImGroupWrapper.ImGroup imGroup) throws Exception {
         //创建本地群聊
         Date now = new Date();
-        imGroup.setType(ImGroupType.FAN);
+        if (imGroup.getType() == null) {
+            imGroup.setType(ImGroupType.FAN);
+        }
         imGroup.setMemberNum(1);
         imGroup.setCreateTime(now);
         imGroup.setUpdateTime(now);
@@ -139,6 +141,15 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         List<GroupMember> groupMemberList = imGroupMemberService.initGroupMembers(groupId,
                 studentIdList, ImGroupMemberRoleType.STUDENT);
         imGroupMemberService.join(groupMemberList, groupId);
+
+        // 如果是机构群,学生自动添加老师好友
+        if (ImGroupType.ORG.equals(imGroup.getType())) {
+            List<ImGroupMember> teacherList = imGroupMemberService.lambdaQuery()
+                    .eq(ImGroupMember::getGroupId, groupId)
+                    .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.TEACHER)
+                    .list();
+            teacherList.forEach(teacher -> imUserFriendService.saveUserFriend(teacher.getUserId(), studentIdList));
+        }
     }
 
 

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

@@ -11,6 +11,7 @@ import javax.annotation.Resource;
 import com.alibaba.fastjson.JSON;
 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.TenantUnbindHistoryMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
 import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
@@ -886,15 +887,24 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
         Long oldTenantId = teacher.getTenantId();
         if (oldTenantId != -1L) {
-            //todo 退群,解散群,删好友
+            List<ImGroup> imGroups = imGroupService.lambdaQuery()
+                    .eq(ImGroup::getCreateBy, teacher.getUserId())
+                    .eq(ImGroup::getType, ImGroupType.ORG)
+                    .list();
+            imGroups.forEach(next -> {
+                try {
+                    imGroupService.dismiss(next.getId());
+                } catch (Exception e) {
+                    log.error("老师修改机构,解散机构群失败:{}", e.getMessage());
+                }
+            });
         }
 
         teacher.setTenantId(updateTenant.getTenantId());
         this.updateById(teacher);
 
-        List<TenantUnbindRecord> tenantUnbindRecords = tenantUnbindRecordMapper.getRecord(oldTenantId,
-                updateTenant.getTeacherId(), "TEACHER");
-        Optional<TenantUnbindRecord> first = tenantUnbindRecords.stream()
+        Optional<TenantUnbindRecord> first = tenantUnbindRecordMapper.getRecord(oldTenantId,
+                        updateTenant.getTeacherId(), "TEACHER").stream()
                 .filter(next -> next.getStatus().equals(ETenantUnBindAuditStatus.DOING)).findFirst();
         if (first.isPresent()) {
             TenantUnbindRecord tenantUnbindRecord = first.get();

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

@@ -123,11 +123,13 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
             // 入参为空走批量发放方式
             queryWrapper.lambda().eq(TenantActivationCode::getTenantId, tenantId)
                     .eq(TenantActivationCode::getTenantAlbumPurchaseId, tenantAlbumPurchaseId)
+                    .eq(TenantActivationCode::getSendStatus, EActivationCode.WAIT)
                     .eq(TenantActivationCode::getActivationStatus, false);
         } else {
             queryWrapper.lambda().eq(TenantActivationCode::getTenantId, tenantId)
                     .eq(TenantActivationCode::getTenantAlbumPurchaseId, tenantAlbumPurchaseId)
                     .in(TenantActivationCode::getActivationCode, activationCodeList)
+                    .eq(TenantActivationCode::getSendStatus, EActivationCode.WAIT)
                     .eq(TenantActivationCode::getActivationStatus, false);
         }
 

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

@@ -9,15 +9,18 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
+import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.entity.SysArea;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 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.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.SysAreaMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
+import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
@@ -79,6 +82,9 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
     @Autowired
     private TenantUnbindHistoryService tenantUnbindHistoryService;
 
+    @Autowired
+    private ImGroupService imGroupService;
+
     /**
      * @param id 详情ID
      * @return TenantUnbindRecord
@@ -218,6 +224,18 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
             teacherDao.update(null, Wrappers.<Teacher>lambdaUpdate()
                     .eq(Teacher::getUserId, audio.getId())
                     .set(Teacher::getTenantId, -1L));
+            // 解散机构群
+            List<ImGroup> imGroups = imGroupService.lambdaQuery()
+                    .eq(ImGroup::getCreateBy, unbindRecord.getUserId())
+                    .eq(ImGroup::getType, ImGroupType.ORG)
+                    .list();
+            for (ImGroup imGroup : imGroups) {
+                try {
+                    imGroupService.dismiss(imGroup.getId());
+                } catch (Exception e) {
+                    log.error("老师解绑审核成功,解散机构群失败:{}", e.getMessage());
+                }
+            }
         }
 
         // 添加历史记录

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

@@ -36,7 +36,7 @@ public class ImGroupWrapper {
         @ApiModelProperty(value = "群头像")
         private String img;
 
-        @ApiModelProperty(value = "群类型:FAN粉丝群、COURSE课程群;")
+        @ApiModelProperty(value = "群类型:FAN粉丝群、COURSE课程群;ORG机构群")
         private ImGroupType type = ImGroupType.FAN;
 
         @ApiModelProperty(value = "创建人")

+ 5 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TenantActivationCodeController.java

@@ -59,6 +59,11 @@ public class TenantActivationCodeController extends BaseController {
         // 查询数据
         IPage<TenantActivationCodeWrapper.TenantActivationCode> pages =
                 tenantActivationCodeService.selectPage(QueryInfo.getPage(query), query);
+        for (TenantActivationCodeWrapper.TenantActivationCode record : pages.getRecords()) {
+            String activationCode = record.getActivationCode();
+            String substring = activationCode.substring(3);
+            record.setActivationCode("***" + substring);
+        }
         return succeed(QueryInfo.pageInfo(pages, pages.getRecords()));
     }
 

+ 23 - 9
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java

@@ -17,17 +17,12 @@ import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumPurchaseService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
-import com.yonge.cooleshow.biz.dal.vo.StudentVo;
-import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.BizHttpStatus;
-import com.yonge.cooleshow.common.enums.UserLockFlag;
-import com.yonge.cooleshow.common.enums.UserStatusEnum;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import com.yonge.cooleshow.common.enums.EActivationCode;
 import com.yonge.cooleshow.tenant.vo.TenantActivationCodeVo;
-import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.easyexcel.ErrMsg;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReader;
@@ -37,7 +32,6 @@ import com.yonge.toolset.utils.excel.POIUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -53,7 +47,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Date;
 import java.util.List;
@@ -123,6 +116,26 @@ public class TenantActivationCodeController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "激活码发放取消", notes = "传入 激活码的ID")
+    @PostMapping("/sendCancel")
+    public HttpResponseResult<Boolean> sendCancel(@RequestParam("id") Long id) {
+        TenantInfo tenantInfo = getTenantInfo();
+        TenantActivationCode activationCode = tenantActivationCodeService.getById(id);
+        if (activationCode == null || !tenantInfo.getId().equals(activationCode.getTenantId())) {
+            throw new BizException("激活码不存在");
+        }
+        boolean update = tenantActivationCodeService.lambdaUpdate()
+                .set(TenantActivationCode::getSendStatus, EActivationCode.WAIT)
+                .eq(TenantActivationCode::getTenantId, id)
+                .eq(TenantActivationCode::getActivationStatus, false)
+                .eq(TenantActivationCode::getSendStatus, EActivationCode.SEND)
+                .update();
+        if (!update) {
+            throw new BizException("激活码已经激活");
+        }
+        return succeed();
+    }
+
     @GetMapping("/exportActiveCode")
     @ApiOperation(value = "导出模板")
     public void exportActiveCode(HttpServletResponse response) {
@@ -178,7 +191,8 @@ public class TenantActivationCodeController extends BaseController {
         try {
             ExcelDataReader<TenantActivationCodeWrapper.ImportTemplate> reader =
                     ExcelUtils.getReader(TenantActivationCodeWrapper.ImportTemplate.class, file);
-            tenantActivationCodeService.importActiveCode(reader.getDataList(), user.getTenantId(), user.getId(), tenantAlbumPurchaseId);
+            tenantActivationCodeService.importActiveCode(reader.getDataList(), user.getTenantId(), user.getId(),
+                    tenantAlbumPurchaseId);
             return HttpResponseResult.succeed();
         } catch (ExcelException e) {
             return HttpResponseResult.failed(BizHttpStatus.IMPORT.getCode(), e.getErrMsgList(),

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

@@ -22,7 +22,6 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;

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

@@ -1,13 +1,22 @@
 package com.yonge.cooleshow.tenant.controller.open;
 
 import com.alibaba.fastjson.JSON;
+import com.google.common.collect.ImmutableList;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
 import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+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.SmsCodeService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.wrapper.StudentWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -16,6 +25,7 @@ import com.yonge.cooleshow.tenant.vo.StudentVo;
 import com.yonge.toolset.base.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -25,7 +35,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.HashSet;
+import java.util.List;
+import java.util.stream.Collectors;
 
+@Slf4j
 @RestController
 @RequestMapping("/open/student")
 @Api(value = "学生表", tags = "学生表")
@@ -34,6 +48,9 @@ public class OpenStudentController extends BaseController {
     private StudentService studentService;
 
     @Autowired
+    private TeacherService teacherService;
+
+    @Autowired
     private TenantInfoService tenantInfoService;
 
     @Resource
@@ -42,6 +59,15 @@ public class OpenStudentController extends BaseController {
     @Autowired
     private SmsCodeService smsCodeService;
 
+    @Autowired
+    private ImUserFriendService imUserFriendService;
+
+    @Autowired
+    private ImGroupService imGroupService;
+
+    @Autowired
+    private ImGroupMemberService imGroupMemberService;
+
     @PostMapping("/save")
     @ApiOperation(value = "新增/修改", notes = "传入Student,换绑时按照返回错误码5004判断,是否需要换绑,updateTenant=true表示换绑")
     public HttpResponseResult<Boolean> save(@Validated @RequestBody StudentVo.Student student) {
@@ -78,10 +104,30 @@ public class OpenStudentController extends BaseController {
             if (one != null) {
                 if (one.getTenantId().equals(-1L)) {
                     throw new BizException("该手机号已经注册为平台学生");
-                } else if (!one.getTenantId().equals(tenantId) && (student.getUpdateTenant() == null ||
+                }
+                if (one.getTenantId().equals(tenantId)) {
+                    throw new BizException("已经注册当前机构,请勿重复注册");
+                }
+                // 转到其他机构
+                if ((student.getUpdateTenant() == null ||
                         !student.getUpdateTenant())) {
                     throw new BizException(5004, "该手机号已经注册为其他平台学生");
                 }
+                // 退群
+                List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
+                        .eq(ImGroupMember::getRoleType, ImGroupMemberRoleType.STUDENT)
+                        .eq(ImGroupMember::getIsAdmin, false)
+                        .eq(ImGroupMember::getUserId, one.getUserId())
+                        .list();
+                List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId)
+                        .distinct().collect(Collectors.toList());
+                groupIdList.forEach(groupId -> {
+                    try {
+                        imGroupService.quit(groupId, one.getUserId(), ClientEnum.STUDENT);
+                    } catch (Exception e) {
+                        log.error("学生注册,切换机构退群失败:{}", e.getMessage());
+                    }
+                });
             }
             student.setId(studentId);
         }
@@ -90,6 +136,16 @@ public class OpenStudentController extends BaseController {
         StudentWrapper.Student studentInfo = JSON.parseObject(JSON.toJSONString(student), StudentWrapper.Student.class);
         studentInfo.setTenantId(tenantInfo.getId());
         studentService.save(studentInfo);
+
+        // 加好友
+        if (student.getId() == null) {
+            SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
+            // 自动与机构老师成为好友
+            List<Teacher> teacherList = teacherService.lambdaQuery()
+                    .eq(Teacher::getTenantId, tenantId).list();
+            teacherList.forEach(next -> imUserFriendService.saveUserFriend(next.getUserId(),
+                    new HashSet<>(ImmutableList.of(sysUser.getId()))));
+        }
         return succeed();
     }
 }