Browse Source

1.机构用户解绑审核逻辑调整

yuanliang 1 year ago
parent
commit
a21af7316d
14 changed files with 218 additions and 241 deletions
  1. 5 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  2. 32 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ETenantUnBindAuditStatus.java
  3. 1 10
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java
  4. 3 3
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java
  5. 6 51
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindRecordController.java
  6. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantUnbindRecord.java
  7. 6 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantUnbindRecordService.java
  8. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  9. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  10. 128 119
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindRecordServiceImpl.java
  11. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindRecordWrapper.java
  12. 8 8
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantUnbindRecordMapper.xml
  13. 10 8
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  14. 11 33
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantUnbindRecordController.java

+ 5 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -363,4 +363,9 @@ public interface SysConfigConstant {
      * 客服电话
      */
     String CUSTOMER_SERVICE_PHONE = "customer_service_phone";
+
+    /**
+     * 机构人员解绑申请超时时间,分钟
+     */
+    String TENANT_USER_UNBIND_EXPIRE_TIME = "tenant_user_unbind_expire_time";
 }

+ 32 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ETenantUnBindAuditStatus.java

@@ -0,0 +1,32 @@
+package com.yonge.cooleshow.common.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 机构用户解绑审核状态
+ */
+public enum ETenantUnBindAuditStatus implements BaseEnum<String, ETenantUnBindAuditStatus> {
+
+    DOING("审核中"),
+    PASS("审核通过"),
+    UNPASS("审核不通过");
+
+    @EnumValue
+    private final String code;
+    private final String msg;
+
+    ETenantUnBindAuditStatus(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

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

@@ -9,9 +9,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
-import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
 import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.vo.VipRecordVo;
@@ -66,13 +64,6 @@ public class StudentController extends BaseController {
     @Autowired
     private VipCardRecordService vipCardRecordService;
 
-    @Autowired
-    private SmsCodeService smsCodeService;
-
-    @Autowired
-    private TenantUnbindRecordService tenantUnbindRecordService;
-
-
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
     @ApiImplicitParams({
@@ -216,7 +207,7 @@ public class StudentController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        if (user.getTenantId() == null || user.getTenantId() == -1) {
+        if (user.getTenantId() == null || user.getTenantId() == -1L) {
             return failed("非机构用户不允许更换机构");
         }
 

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

@@ -216,9 +216,9 @@ public class TeacherController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"老师编号", "昵称", "姓名", "手机号", "老师类型",
-                    "注册时间", "认证时间", "状态", "是否是会员", "徽章"}, new String[]{
-                    "userId", "username", "realName", "phone", "entryFlag.code == 1 ? '达人' : '游客'", "createTime", "entryAuthDate",
-                    "userStatus.msg", "isVip.code == 1 ? '是' : '否'", "tag"}, rows);
+                    "注册时间", "认证时间", "状态", "是否是会员", "徽章", "机构"}, new String[]{
+                    "userId", "username", "realName", "phone", "entryFlag.code == 1 ? '达人' : '游客'", "createTime",
+                    "entryAuthDate","userStatus.msg", "isVip.code == 1 ? '是' : '否'", "tag", "tenantName"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=老师列表-" + DateUtil.getDate(new Date()) + ".xls");

+ 6 - 51
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindRecordController.java

@@ -5,14 +5,7 @@ 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;
@@ -24,18 +17,14 @@ import io.swagger.annotations.Api;
 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.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
+import javax.annotation.Resource;
 
 
 @Slf4j
@@ -48,53 +37,26 @@ public class TenantUnbindRecordController extends BaseController {
     @Autowired
     private TenantUnbindRecordService tenantUnbindRecordService;
 
-    @Autowired
-    private SysAreaService sysAreaService;
-
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
     private EmployeeService employeeService;
 
-    @Autowired
-    private StudentService studentService;
-
-    @Autowired
-    private TeacherService teacherService;
-
-
     @ApiOperation(value = "查询分页", notes = "机构解绑申请记录- 传入 TenantUnbindRecordVo.TenantUnbindRecordQuery")
+    @PreAuthorize("@pcs.hasPermissions('tenantUnbindRecord/page')")
     @PostMapping("/page")
     public HttpResponseResult<PageInfo<TenantUnbindRecordWrapper.TenantUnbindRecord>>
     page(@RequestBody TenantUnbindRecordWrapper.TenantUnbindRecordQuery query) {
         // 查询数据
         IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> pages =
                 tenantUnbindRecordService.selectPage(QueryInfo.getPage(query), query);
-
-
-        List<Integer> areaCodeList = pages.getRecords().stream().map(next -> {
-            HashSet<Integer> areaCodes = new HashSet<>();
-            areaCodes.add(next.getProvinceCode());
-            areaCodes.add(next.getCityCode());
-            areaCodes.add(next.getRegionCode());
-            return areaCodes;
-        }).flatMap(Collection::stream).filter(Objects::nonNull).distinct().collect(Collectors.toList());
-        if (!areaCodeList.isEmpty()) {
-            Map<Integer, String> codeNameMap = sysAreaService.lambdaQuery().in(SysArea::getCode, areaCodeList).list()
-                    .stream().collect(Collectors.toMap(SysArea::getCode, SysArea::getName));
-
-            pages.getRecords().forEach(next -> {
-                next.setProvinceName(codeNameMap.getOrDefault(next.getProvinceCode(), ""));
-                next.setCityName(codeNameMap.getOrDefault(next.getCityCode(), ""));
-                next.setRegionName(codeNameMap.getOrDefault(next.getRegionCode(), ""));
-            });
-        }
         return succeed(QueryInfo.pageInfo(pages, pages.getRecords()));
     }
 
     @ApiOperation(value = "审核")
     @PostMapping("/audit")
+    @PreAuthorize("@pcs.hasPermissions('tenantUnbindRecord/audit')")
     public HttpResponseResult<Boolean> audit(@RequestBody TenantUnbindRecordWrapper.Audio audio) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
@@ -104,14 +66,7 @@ public class TenantUnbindRecordController extends BaseController {
         if (employeeVo == null || UserLockFlag.LOCKED.equals(employeeVo.getLockFlag())) {
             throw new BizException("权限不足");
         }
-
-        if (audio.getId() == null || audio.getStatus() == null) {
-            throw new BizException("参数错误");
-        }
-        Boolean entry = tenantUnbindRecordService.entry(audio);
-
+        tenantUnbindRecordService.tenantUserUnbindAudit(audio, sysUser.getId(),true);
         return succeed();
     }
-
-
 }

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

@@ -3,7 +3,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.IdType;
+import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
 import lombok.Data;
 
 import io.swagger.annotations.ApiModel;
@@ -44,7 +44,7 @@ public class TenantUnbindRecord implements Serializable {
 
     @ApiModelProperty("审核状态 DOING、审核中 PASS、通过 UNPASS、不通过")
     @TableField(value = "status_")
-    private String status;
+    private ETenantUnBindAuditStatus status;
 
     @ApiModelProperty("审核人")
     @TableField(value = "verify_user_id_")

+ 6 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantUnbindRecordService.java

@@ -2,8 +2,8 @@ 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.wrapper.TenantUnbindRecordWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantUnbindRecord;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
 
 /**
  * 机构解绑申请记录
@@ -47,8 +47,10 @@ public interface TenantUnbindRecordService extends IService<TenantUnbindRecord>
 
     /**
      * 审核
-     * @param audio
-     * @return
+     *
+     * @param audio        审核信息
+     * @param verifyUserId 审核人
+     * @param intervene    true:后台审核,false:机构管理员
      */
-    Boolean entry(TenantUnbindRecordWrapper.Audio audio);
+    void tenantUserUnbindAudit(TenantUnbindRecordWrapper.Audio audio, Long verifyUserId, Boolean intervene);
 }

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

@@ -472,7 +472,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
             try {
                 imGroupService.quit(groupId, student.getUserId(), ClientEnum.STUDENT);
             } catch (Exception e) {
-                log.error("退出群聊失败:{}", e);
+                log.error("退出群聊失败", e);
             }
         }
         this.lambdaUpdate().set(Student::getTenantId, toTenantId)

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

@@ -122,7 +122,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             detail = new TeacherVo();
         }
         int num = DateUtil.daysBetween(new Date(), detail.getMembershipEndTime());
-        detail.setMembershipDays(num < 0 ? 0 : num);
+        detail.setMembershipDays(Math.max(num, 0));
         List<TeacherStyleVideo> teacherStyleVideos = teacherStyleVideoService.selectListByUserId(userId);
         detail.setStyleVideo(teacherStyleVideos);
         TeacherAuthEntryRecordVo lastRecordByUserId = entryRecordService.getLastRecordByUserId(userId);
@@ -205,7 +205,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         teacherHomeVo.setHeardUrl(teacher.getAvatar());
         teacherHomeVo.setIsVip(teacher.getIsVip());
         int num = DateUtil.daysBetween(new Date(), teacher.getMembershipEndTime());
-        teacherHomeVo.setMembershipDays(num < 0 ? 0 : num);
+        teacherHomeVo.setMembershipDays(Math.max(num, 0));
         if (YesOrNoEnum.YES.equals(teacher.getEntryFlag())) {
             teacherHomeVo.setEntryStatus(AuthStatusEnum.PASS);
         } else {

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

@@ -3,31 +3,48 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 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;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
-import com.yonge.cooleshow.biz.dal.entity.*;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
+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.TenantUnbindRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
-import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.mapper.SysAreaMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
+import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
+import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.beans.BeanUtils;
-import lombok.extern.slf4j.Slf4j;
-import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
-
-import java.util.*;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * 机构解绑申请记录
@@ -42,9 +59,6 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
     private TeacherDao teacherDao;
 
     @Autowired
-    private StudentDao studentDao;
-
-    @Autowired
     private SubjectDao subjectDao;
 
     @Autowired
@@ -60,174 +74,166 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
     private TeacherService teacherService;
 
     @Autowired
-    private SysMessageService sysMessageService;
+    private SysConfigService sysConfigService;
 
     @Autowired
-    private SysConfigService sysConfigService;
+    private SysAreaMapper sysAreaMapper;
 
     @Autowired
     private TenantInfoService tenantInfoService;
 
-	/**
-     * 查询详情
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    /**
      * @param id 详情ID
      * @return TenantUnbindRecord
      */
-	@Override
+    @Override
     public TenantUnbindRecord detail(Long id) {
-        
+
         return baseMapper.selectById(id);
     }
-    
+
     /**
      * 分页查询
-     * @param page IPage<TenantUnbindRecord>
+     *
+     * @param page  IPage<TenantUnbindRecord>
      * @param query TenantUnbindRecordWrapper.TenantUnbindRecordQuery
      * @return IPage<TenantUnbindRecord>
      */
     @Override
-    public IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> selectPage(IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> page, TenantUnbindRecordWrapper.TenantUnbindRecordQuery query) {
+    public IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> selectPage(
+            IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> page,
+            TenantUnbindRecordWrapper.TenantUnbindRecordQuery query) {
 
         List<TenantUnbindRecordWrapper.TenantUnbindRecord> records = baseMapper.selectPage(page, query);
-        if(records.isEmpty()){
+        if (records.isEmpty()) {
             return page.setRecords(records);
         }
 
-        Map<String, List<TenantUnbindRecordWrapper.TenantUnbindRecord>> gropuByUserType = records.stream().collect(Collectors.groupingBy(TenantUnbindRecordWrapper.TenantUnbindRecord::getUserType));
+        List<Integer> areaCodeList = records.stream().map(next -> {
+            HashSet<Integer> areaCodes = new HashSet<>();
+            areaCodes.add(next.getProvinceCode());
+            areaCodes.add(next.getCityCode());
+            areaCodes.add(next.getRegionCode());
+            return areaCodes;
+        }).flatMap(Collection::stream).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+        if (!areaCodeList.isEmpty()) {
+            QueryWrapper<SysArea> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().in(SysArea::getCode, areaCodeList);
+
+            Map<Integer, String> codeNameMap = sysAreaMapper.selectList(queryWrapper)
+                    .stream().collect(Collectors.toMap(SysArea::getCode, SysArea::getName));
+
+            records.forEach(next -> {
+                next.setProvinceName(codeNameMap.getOrDefault(next.getProvinceCode(), ""));
+                next.setCityName(codeNameMap.getOrDefault(next.getCityCode(), ""));
+                next.setRegionName(codeNameMap.getOrDefault(next.getRegionCode(), ""));
+            });
+        }
 
-        List<Long> teacherIds  = new ArrayList<>();
-        List<Long> studentIds  = new ArrayList<>();
+        List<Long> teacherIdList = records.stream().map(TenantUnbindRecordWrapper.TenantUnbindRecord::getUserId)
+                .collect(Collectors.toList());
 
-        for (Map.Entry<String, List<TenantUnbindRecordWrapper.TenantUnbindRecord>> entry : gropuByUserType.entrySet()) {
-            if("TEACHER".equals(entry.getKey())){
-                teacherIds.addAll(entry.getValue().stream().map(TenantUnbindRecordWrapper.TenantUnbindRecord::getUserId).collect(Collectors.toList()));
-            }else{
-                studentIds.addAll(entry.getValue().stream().map(TenantUnbindRecordWrapper.TenantUnbindRecord::getUserId).collect(Collectors.toList()));
+        QueryWrapper<Teacher> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.lambda().in(Teacher::getUserId, teacherIdList);
+        List<Teacher> teachers = teacherDao.selectList(objectQueryWrapper);
 
-            }
 
-        }
-        List<Teacher> teachers = new ArrayList<>();
-        List<Teacher> students = new ArrayList<>();
-        List<Teacher> users = new ArrayList<>();
-        if(!teacherIds.isEmpty()){
-            QueryWrapper<Teacher>
-                    objectQueryWrapper = new QueryWrapper<>();
-            objectQueryWrapper.lambda()
-                    .in(Teacher::getUserId,teacherIds);
-            teachers = teacherDao.selectList(objectQueryWrapper);
-        }else {
-            QueryWrapper<Student>
-                    objectQueryWrapper = new QueryWrapper<>();
-            objectQueryWrapper.lambda()
-                    .in(Student::getUserId,studentIds);
-            List<Student> studentList = studentDao.selectList(objectQueryWrapper);
-            students =studentList.stream().map(next->{
-                Teacher teacher = new Teacher();
-                teacher.setUserId(next.getUserId());
-                teacher.setSubject(next.getSubjectId());
-                return teacher;
-            }).collect(Collectors.toList());
-        }
-        users.addAll(students);
-        users.addAll(teachers);
-
-        List<Long> subjectIdList = users.stream().map(next -> {
-            List<Long > list = new ArrayList<>();
-            String subjectId = next.getSubjectId();
-            if (StringUtils.isEmpty(subjectId)) {
-                return list;
-            }
-            return Arrays.stream(next.getSubjectId().split(",")).map(Long::valueOf).collect(Collectors.toList());
-        }).flatMap(Collection::stream).collect(Collectors.toList());
+        List<Long> subjectIdList = teachers.stream().filter(next -> StringUtils.isNotEmpty(next.getSubjectId()))
+                .map(next -> Arrays.stream(next.getSubjectId().split(",")).map(Long::valueOf).collect(Collectors.toList()))
+                .flatMap(Collection::stream).collect(Collectors.toList());
 
-        Map<Long,String> userIdSubjectNameMap = new HashMap<>();
-        if(!subjectIdList.isEmpty()){
+        Map<Long, String> userIdSubjectNameMap = new HashMap<>();
+        Map<Long, String> userIdSubjectIdMap = new HashMap<>();
+        if (!subjectIdList.isEmpty()) {
             List<Subject> subjectList = subjectDao.findBySubjectIds(subjectIdList);
-            Map<Long, String> idNameMap = subjectList.stream().collect(Collectors.toMap(Subject::getId, Subject::getName));
+            Map<Long, String> idNameMap = subjectList.stream().collect(Collectors.toMap(Subject::getId,
+                    Subject::getName));
 
-            for (Teacher user : users) {
+            for (Teacher user : teachers) {
                 String subjectId = user.getSubjectId();
-                if(StringUtils.isEmpty(subjectId)){
+                if (StringUtils.isEmpty(subjectId)) {
                     continue;
                 }
+                userIdSubjectIdMap.put(user.getUserId(), subjectId);
                 List<String> names = Arrays.stream(subjectId.split(",")).map(next ->
                         idNameMap.getOrDefault(Long.valueOf(next), "")).collect(Collectors.toList());
-                userIdSubjectNameMap.put(user.getUserId(),String.join(",",names));
+                userIdSubjectNameMap.put(user.getUserId(), String.join(",", names));
             }
         }
 
-        for (TenantUnbindRecordWrapper.TenantUnbindRecord record : records) {
-            record.setSubjectName(userIdSubjectNameMap.getOrDefault(record.getUserId(),""));
-
+        for (TenantUnbindRecordWrapper.TenantUnbindRecord next : records) {
+            next.setSubjectId(userIdSubjectIdMap.getOrDefault(next.getUserId(), ""));
+            next.setSubjectName(userIdSubjectNameMap.getOrDefault(next.getUserId(), ""));
         }
-
-
         return page.setRecords(records);
     }
-	
+
     /**
      * 添加
+     *
      * @param tenantUnbindRecord TenantUnbindRecordWrapper.TenantUnbindRecord
      * @return Boolean
      */
     @Override
-    public Boolean add(TenantUnbindRecordWrapper.TenantUnbindRecord tenantUnbindRecord) {    	
-        
+    public Boolean add(TenantUnbindRecordWrapper.TenantUnbindRecord tenantUnbindRecord) {
+
         return this.save(JSON.parseObject(tenantUnbindRecord.jsonString(), TenantUnbindRecord.class));
     }
 
     /**
      * 更新
+     *
      * @param tenantUnbindRecord TenantUnbindRecordWrapper.TenantUnbindRecord
      * @return Boolean
      */
     @Override
-    public Boolean update(TenantUnbindRecordWrapper.TenantUnbindRecord tenantUnbindRecord){
+    public Boolean update(TenantUnbindRecordWrapper.TenantUnbindRecord tenantUnbindRecord) {
 
-        return this.updateById(JSON.parseObject(tenantUnbindRecord.jsonString(), TenantUnbindRecord.class));       
+        return this.updateById(JSON.parseObject(tenantUnbindRecord.jsonString(), TenantUnbindRecord.class));
     }
 
+    /**
+     * 机构用户解绑审核
+     *
+     * @param audio        审核信息
+     * @param verifyUserId 审核人
+     * @param intervene    是否平台介入审核   true:后台审核,false:机构管理员
+     */
+    @Transactional(rollbackFor = Exception.class)
     @Override
-    public Boolean entry(TenantUnbindRecordWrapper.Audio audio) {
+    public void tenantUserUnbindAudit(TenantUnbindRecordWrapper.Audio audio, Long verifyUserId, Boolean intervene) {
 
-        TenantUnbindRecord record = getById(audio.getId());
-        if (record == null) {
-            throw new BizException("审核数据不存在");
-        } else if (!"DOING".equals(record.getStatus())) {
-            throw new BizException("审核数据已被处理");
+        TenantUnbindRecord unbindRecord = tenantUnbindRecordService.getById(audio.getId());
+        if (unbindRecord == null || !ETenantUnBindAuditStatus.DOING.equals(unbindRecord.getStatus())) {
+            throw new BizException("审核记录不存在");
         }
-
-        boolean update = tenantUnbindRecordService.lambdaUpdate()
-                .set(TenantUnbindRecord::getStatus, audio.getStatus() ? "PASS" : "UNPASS")
+        // 平台介入审核,需要达到审批超时时间
+        if (Boolean.TRUE.equals(intervene)) {
+            String configValue = sysConfigService.findConfigValue(SysConfigConstant.TENANT_USER_UNBIND_EXPIRE_TIME);
+            if (StringUtils.isNotEmpty(configValue) &&
+                    (System.currentTimeMillis() < (unbindRecord.getCreateTime().getTime() + Long.parseLong(configValue) * 60 * 1000))) {
+                throw new BizException("请联系机构管理人员审核");
+            }
+        }
+        this.lambdaUpdate()
+                .set(TenantUnbindRecord::getStatus, Boolean.TRUE.equals(audio.getStatus()) ?
+                        ETenantUnBindAuditStatus.PASS : ETenantUnBindAuditStatus.UNPASS)
                 .set(TenantUnbindRecord::getReason, audio.getReason())
-                .set(TenantUnbindRecord::getVerifyUserId, sysUserFeignService.queryUserInfo().getId())
+                .set(TenantUnbindRecord::getInterveneTime, Boolean.TRUE.equals(intervene) ? new Date() : null)
+                .set(TenantUnbindRecord::getVerifyUserId, verifyUserId)
                 .eq(TenantUnbindRecord::getId, audio.getId())
-                .eq(TenantUnbindRecord::getStatus, "DOING").update();
-        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();
-            }
+                .eq(TenantUnbindRecord::getStatus, ETenantUnBindAuditStatus.DOING)
+                .update();
+        if (Boolean.TRUE.equals(audio.getStatus())) {
+            teacherDao.update(null, Wrappers.<Teacher>lambdaUpdate()
+                    .eq(Teacher::getUserId, audio.getId())
+                    .set(Teacher::getTenantId, -1L));
         }
-
         // 老师端发送消息
-        CompletableFuture.runAsync(() -> {
-
-            sendTeacherUnBindMessage(audio, record);
-        });
-        return true;
+        CompletableFuture.runAsync(() -> sendTeacherUnBindMessage(audio, unbindRecord));
     }
 
     private void sendTeacherUnBindMessage(TenantUnbindRecordWrapper.Audio audio, TenantUnbindRecord record) {
@@ -242,15 +248,18 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
         receivers.put(record.getUserId(), sysUser.getPhone());
         if (Boolean.TRUE.equals(audio.getStatus())) {
             try {
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_UNBIND_PASS,
-                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(),tenantInfo.getName());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
+                        MessageTypeEnum.TEACHER_UNBIND_PASS,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), tenantInfo.getName());
             } catch (Exception e) {
                 log.error("机构入驻审核极光消息推送异常");
             }
             try {
                 String serviceConfig = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_PHONE);
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_UNBIND_UNPASS,
-                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(),tenantInfo.getName(), audio.getReason(),serviceConfig);
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
+                        MessageTypeEnum.TEACHER_UNBIND_UNPASS,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), tenantInfo.getName(),
+                        audio.getReason(), serviceConfig);
             } catch (Exception e) {
                 log.error("机构入驻审核极光消息推送异常");
             }

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

@@ -11,6 +11,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 
+import javax.validation.constraints.NotNull;
 import java.util.Date;
 import java.util.Optional;
 
@@ -165,9 +166,11 @@ public class TenantUnbindRecordWrapper {
     public static class Audio {
 
         @ApiModelProperty("审核记录的ID")
+        @NotNull
         private Long id;
 
         @ApiModelProperty("审核状态,true:通过,false:驳回")
+        @NotNull
         private Boolean status;
 
         @ApiModelProperty("审核理由")

+ 8 - 8
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantUnbindRecordMapper.xml

@@ -33,13 +33,13 @@
         LEFT JOIN tenant_info ti ON ti.id_ = t.tenant_id_
         LEFT JOIN sys_user su on su.id_ = t.user_id_
         <where>
-            <if test="param.keyword != null">
+            <if test="param.keyword != null and param.keyword.trim() != ''">
                 AND (
-                ti.name_ like concat ('%',#{param2.keyword},'%') or
-                ti.username_ like concat ('%',#{param2.keyword},'%') or
-                ti.phone_ like concat ('%',#{param2.keyword},'%') or
-                su.username_ like concat ('%',#{param2.keyword},'%') or
-                su.phone_ like concat ('%',#{param2.keyword},'%')
+                ti.name_ like concat ('%',#{param.keyword},'%') or
+                ti.username_ like concat ('%',#{param.keyword},'%') or
+                ti.phone_ like concat ('%',#{param.keyword},'%') or
+                su.username_ like concat ('%',#{param.keyword},'%') or
+                su.phone_ like concat ('%',#{param.keyword},'%')
                 )
             </if>
             <if test="param.userType != null">
@@ -54,10 +54,10 @@
             <if test="param.regionCode != null">
                 AND ti.region_code_ = #{param.regionCode}
             </if>
-            <if test="param.status != null and param.status != ''">
+            <if test="param.status != null">
                 AND t.status_ = #{param.status}
             </if>
         </where>
-        order by t.id_ desc
+        order by t.status_='DOING' desc, t.id_
     </select>
 </mapper>

+ 10 - 8
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -19,6 +19,7 @@ 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.ETenantUnBindAuditStatus;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.util.StringUtil;
@@ -38,6 +39,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.List;
 
@@ -47,7 +49,7 @@ import java.util.List;
 public class TeacherController extends BaseController {
     @Autowired
     private TeacherService teacherService;
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
@@ -155,7 +157,6 @@ public class TeacherController extends BaseController {
     }
 
 
-
     /**
      * 最近练习
      */
@@ -163,7 +164,7 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "设置老师默认查询声部")
     public HttpResponseResult defaultSubject(@RequestParam(required = false) Long subjectId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null  || sysUser.getId() == null) {
+        if (sysUser == null || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
         if (subjectId == null) {
@@ -183,7 +184,8 @@ public class TeacherController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        IdcardInfoExtractor idcardInfoExtractor = sysUserService.updateUserCard(realNameAuthDto, user, ClientEnum.TEACHER);
+        IdcardInfoExtractor idcardInfoExtractor = sysUserService.updateUserCard(realNameAuthDto, user,
+                ClientEnum.TEACHER);
         return succeed(idcardInfoExtractor);
     }
 
@@ -198,7 +200,7 @@ public class TeacherController extends BaseController {
             return failed("验证码不能为空");
         }
         boolean validCode = smsCodeService.verifyValidCode(user.getPhone(), unbindTenant.getCode(), "");
-        if (validCode) {
+        if (!validCode) {
             return failed("验证码错误");
         }
         if (user.getTenantId() == null || user.getTenantId() == -1) {
@@ -214,17 +216,17 @@ public class TeacherController extends BaseController {
                 .eq(TenantUnbindRecord::getTenantId, user.getTenantId())
                 .eq(TenantUnbindRecord::getUserType, "TEACHER")
                 .eq(TenantUnbindRecord::getUserId, user.getId())
-                .eq(TenantUnbindRecord::getStatus, "DOING")
+                .eq(TenantUnbindRecord::getStatus, ETenantUnBindAuditStatus.DOING)
                 .last("limit 1").one();
         if (one != null) {
-            return failed("请勿重复申请");
+            return failed("请勿重复提交申请");
         }
         TenantUnbindRecord tenantUnbindRecord = new TenantUnbindRecord();
         tenantUnbindRecord.setTenantId(user.getTenantId());
         tenantUnbindRecord.setUserId(user.getId());
         tenantUnbindRecord.setUserType("TEACHER");
         tenantUnbindRecord.setUnbindReason(unbindTenant.getUnbindReason());
-        tenantUnbindRecord.setStatus("DOING");
+        tenantUnbindRecord.setStatus(ETenantUnBindAuditStatus.DOING);
         tenantUnbindRecordService.save(tenantUnbindRecord);
         return succeed();
     }

+ 11 - 33
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantUnbindRecordController.java

@@ -5,9 +5,11 @@ 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.SysArea;
-import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.vo.EmployeeVo;
+import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
+import com.yonge.cooleshow.biz.dal.service.EmployeeService;
+import com.yonge.cooleshow.biz.dal.service.SysAreaService;
+import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
+import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -23,9 +25,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.*;
-import java.util.stream.Collectors;
-
 
 @Slf4j
 @Validated
@@ -46,6 +45,9 @@ public class TenantUnbindRecordController extends BaseController {
     @Autowired
     private EmployeeService employeeService;
 
+    @Autowired
+    private TenantStaffService tenantStaffService;
+
 
     @ApiOperation(value = "查询分页", notes = "机构解绑申请记录- 传入 TenantUnbindRecordVo.TenantUnbindRecordQuery")
     @PostMapping("/page")
@@ -54,25 +56,6 @@ public class TenantUnbindRecordController extends BaseController {
         // 查询数据
         IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> pages =
                 tenantUnbindRecordService.selectPage(QueryInfo.getPage(query), query);
-
-
-        List<Integer> areaCodeList = pages.getRecords().stream().map(next -> {
-            HashSet<Integer> areaCodes = new HashSet<>();
-            areaCodes.add(next.getProvinceCode());
-            areaCodes.add(next.getCityCode());
-            areaCodes.add(next.getRegionCode());
-            return areaCodes;
-        }).flatMap(Collection::stream).filter(Objects::nonNull).distinct().collect(Collectors.toList());
-        if (!areaCodeList.isEmpty()) {
-            Map<Integer, String> codeNameMap = sysAreaService.lambdaQuery().in(SysArea::getCode, areaCodeList).list()
-                    .stream().collect(Collectors.toMap(SysArea::getCode, SysArea::getName));
-
-            pages.getRecords().forEach(next -> {
-                next.setProvinceName(codeNameMap.getOrDefault(next.getProvinceCode(), ""));
-                next.setCityName(codeNameMap.getOrDefault(next.getCityCode(), ""));
-                next.setRegionName(codeNameMap.getOrDefault(next.getRegionCode(), ""));
-            });
-        }
         return succeed(QueryInfo.pageInfo(pages, pages.getRecords()));
     }
 
@@ -83,16 +66,11 @@ public class TenantUnbindRecordController extends BaseController {
         if (sysUser == null) {
             throw new BizException("请登录");
         }
-        EmployeeVo employeeVo = employeeService.detail(sysUserFeignService.queryUserInfo().getId());
-        if (employeeVo == null || UserLockFlag.LOCKED.equals(employeeVo.getLockFlag())) {
+        TenantStaff employeeVo = tenantStaffService.detail(sysUserFeignService.queryUserInfo().getId());
+        if (employeeVo == null || UserLockFlag.LOCKED.equals(employeeVo.getStatus())) {
             throw new BizException("权限不足");
         }
-
-        if (audio.getId() == null || audio.getStatus() == null) {
-            throw new BizException("参数错误");
-        }
-        Boolean entry = tenantUnbindRecordService.entry(audio);
-
+        tenantUnbindRecordService.tenantUserUnbindAudit(audio, sysUser.getId(),false);
         return succeed();
     }