Browse Source

1.添加人员解绑审核历史记录

yuanliang 1 year ago
parent
commit
d731d56482
21 changed files with 676 additions and 124 deletions
  1. 3 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ETenantUnBindAuditStatus.java
  2. 8 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java
  3. 38 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindHistoryController.java
  4. 76 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantUnbindHistory.java
  5. 18 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantUnbindRecord.java
  6. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantUnbindHistoryMapper.java
  7. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantUnbindRecordMapper.java
  8. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  9. 43 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantUnbindHistoryService.java
  10. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantUnbindRecordService.java
  11. 79 27
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  12. 66 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindHistoryServiceImpl.java
  13. 66 54
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindRecordServiceImpl.java
  14. 69 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindHistoryWrapper.java
  15. 25 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindRecordWrapper.java
  16. 17 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/teacher/TeacherWrapper.java
  17. 29 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantUnbindHistoryMapper.xml
  18. 11 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantUnbindRecordMapper.xml
  19. 59 7
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java
  20. 12 10
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantInfoController.java
  21. 17 11
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantUnbindRecordController.java

+ 3 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ETenantUnBindAuditStatus.java

@@ -10,7 +10,9 @@ public enum ETenantUnBindAuditStatus implements BaseEnum<String, ETenantUnBindAu
 
     DOING("审核中"),
     PASS("审核通过"),
-    UNPASS("审核不通过");
+    UNPASS("审核不通过"),
+    CANCEL("撤销"),
+    CLOSE("关闭");
 
     @EnumValue
     private final String code;

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

@@ -169,6 +169,14 @@ public class TeacherController extends BaseController {
         return teacherService.submit(teacherSubmitReq);
     }
 
+    @PostMapping("/updateTenant")
+    @ApiOperation(value = "新增或修改", notes = "传入teacher")
+    @PreAuthorize("@pcs.hasPermissions('teacher/updateTenant')")
+    public HttpResponseResult<Boolean> updateTenant(@Valid @RequestBody TeacherWrapper.UpdateTenant updateTenant) {
+        teacherService.updateTenant(updateTenant);
+        return succeed();
+    }
+
     @ApiOperation(value = "老师列表导出")
     @PostMapping("export")
     @PreAuthorize("@pcs.hasPermissions('teacher/export')")

+ 38 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindHistoryController.java

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
+import com.yonge.cooleshow.biz.dal.entity.TenantUnbindHistory;
+import com.yonge.cooleshow.biz.dal.service.TenantUnbindHistoryService;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindHistoryWrapper;
+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.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;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/tenantUnbindHistory")
+@Api(tags = "机构解绑历史表")
+public class TenantUnbindHistoryController {
+
+    @Autowired
+    private TenantUnbindHistoryService tenantUnbindHistoryService;
+
+    @ApiOperation(value = "查询分页", notes = "机构解绑历史表- 传入 TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery")
+    @PostMapping("/page")
+    public R<PageInfo<TenantUnbindHistory>> page(@RequestBody TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery query) {
+
+        IPage<TenantUnbindHistory> pages = tenantUnbindHistoryService.selectPage(QueryInfo.getPage(query), query);
+
+        return R.from(QueryInfo.pageInfo(pages));
+    }
+}

+ 76 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantUnbindHistory.java

@@ -0,0 +1,76 @@
+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.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 机构解绑历史表
+ * 2023-08-18 18:00:10
+ */
+@Data
+@ApiModel(" TenantUnbindHistory-机构解绑历史表")
+@TableName("tenant_unbind_history")
+public class TenantUnbindHistory implements Serializable {
+
+    @ApiModelProperty("主键ID")
+    @TableId(value = "id_")
+    private Long id;
+
+    @ApiModelProperty("机构ID")
+    @TableField(value = "tenant_id_")
+    private Long tenantId;
+
+    @ApiModelProperty("机构名称")
+    @TableField(value = "tenant_name_")
+    private String tenantName;
+
+    @ApiModelProperty("用户ID")
+    @TableField(value = "user_id_")
+    private Long userId;
+
+    @ApiModelProperty("用户名称")
+    @TableField(value = "user_name_")
+    private String userName;
+
+    @ApiModelProperty("手机号")
+    @TableField(value = "phone_")
+    private String phone;
+
+    @ApiModelProperty("用户类型")
+    @TableField(value = "user_type_")
+    private String userType;
+
+    @ApiModelProperty("解绑理由")
+    @TableField(value = "unbind_reason_")
+    private String unbindReason;
+
+    @ApiModelProperty("审核状态 CANCEL、撤销 PASS、通过 UNPASS、不通过")
+    @TableField(value = "status_")
+    private ETenantUnBindAuditStatus status;
+
+    @ApiModelProperty("审核人")
+    @TableField(value = "verify_user_id_")
+    private Long verifyUserId;
+
+    @ApiModelProperty("审核理由")
+    @TableField(value = "reason_")
+    private String reason;
+
+    @ApiModelProperty("后台介入时间")
+    @TableField(value = "intervene_time_")
+    private Date interveneTime;
+
+    @ApiModelProperty("创建时间")
+    @TableField(value = "create_time_")
+    private Date createTime;
+
+}

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

@@ -4,10 +4,9 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
-import lombok.Data;
-
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -15,7 +14,7 @@ import java.util.Date;
 
 /**
  * 机构解绑申请记录
- * 2023-07-21 17:32:49
+ * 2023-08-18 11:06:07
  */
 @Data
 @ApiModel(" TenantUnbindRecord-机构解绑申请记录")
@@ -30,14 +29,30 @@ public class TenantUnbindRecord implements Serializable {
     @TableField(value = "tenant_id_")
     private Long tenantId;
 
+    @ApiModelProperty("机构名称")
+    @TableField(value = "tenant_name_")
+    private String tenantName;
+
     @ApiModelProperty("用户ID")
     @TableField(value = "user_id_")
     private Long userId;
 
+    @ApiModelProperty("用户名称")
+    @TableField(value = "user_name_")
+    private String userName;
+
+    @ApiModelProperty("手机号")
+    @TableField(value = "phone_")
+    private String phone;
+
     @ApiModelProperty("用户类型")
     @TableField(value = "user_type_")
     private String userType;
 
+    @ApiModelProperty("声部名称")
+    @TableField(value = "subject_name_")
+    private String subjectName;
+
     @ApiModelProperty("解绑理由")
     @TableField(value = "unbind_reason_")
     private String unbindReason;

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantUnbindHistoryMapper.java

@@ -0,0 +1,27 @@
+package com.yonge.cooleshow.biz.dal.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+import com.yonge.cooleshow.biz.dal.entity.TenantUnbindHistory;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindHistoryWrapper;
+
+/**
+ * 机构解绑历史表
+ * 2023-08-18 18:00:10
+ */
+@Repository
+public interface TenantUnbindHistoryMapper extends BaseMapper<TenantUnbindHistory> {
+
+    /**
+     * 分页查询
+     * @param page IPage<TenantUnbindHistoryWrapper.TenantUnbindHistory>
+     * @param param TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery
+     * @return List<TenantUnbindHistoryWrapper.TenantUnbindHistory>
+     */
+    List<TenantUnbindHistory> selectPage(@Param("page") IPage<TenantUnbindHistory> page, @Param("param") TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery param);
+
+}

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantUnbindRecordMapper.java

@@ -26,4 +26,6 @@ public interface TenantUnbindRecordMapper extends BaseMapper<TenantUnbindRecord>
     List<TenantUnbindRecordWrapper.TenantUnbindRecord> selectPage(@Param("page") IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> page,
                                                                   @Param("param") TenantUnbindRecordWrapper.TenantUnbindRecordQuery param);
 
+    List<TenantUnbindRecord> getRecord(@Param("tenantId") Long tenantId, @Param("userId") Long userId,
+                                 @Param("userType") String userType);
 }

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

@@ -175,4 +175,6 @@ public interface TeacherService extends IService<Teacher> {
      * @return TeacherWrapper.TeacherStatInfo
      */
     TeacherWrapper.TeacherStatInfo findTeacherStatInfoById(Long userId);
+
+    void updateTenant(TeacherWrapper.UpdateTenant updateTenant);
 }

+ 43 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantUnbindHistoryService.java

@@ -0,0 +1,43 @@
+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.TenantUnbindHistoryWrapper;
+import com.yonge.cooleshow.biz.dal.entity.TenantUnbindHistory;
+
+/**
+ * 机构解绑历史表
+ * 2023-08-18 18:00:10
+ */
+public interface TenantUnbindHistoryService extends IService<TenantUnbindHistory>  {
+
+    /**
+     * 查询详情
+     * @param id 详情ID
+     * @return TenantUnbindHistory
+     */
+    TenantUnbindHistory detail(Long id);
+
+    /**
+     * 分页查询
+     * @param page IPage<TenantUnbindHistory>
+     * @param query TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery
+     * @return IPage<TenantUnbindHistory>
+     */
+    IPage<TenantUnbindHistory> selectPage(IPage<TenantUnbindHistory> page, TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery query);
+
+    /**
+     * 添加
+     * @param tenantUnbindHistory TenantUnbindHistoryWrapper.TenantUnbindHistory
+     * @return Boolean
+     */
+    Boolean add(TenantUnbindHistoryWrapper.TenantUnbindHistory tenantUnbindHistory);
+
+    /**
+     * 更新
+     * @param tenantUnbindHistory TenantUnbindHistoryWrapper.TenantUnbindHistory
+     * @return Boolean
+     */
+    Boolean update(TenantUnbindHistoryWrapper.TenantUnbindHistory tenantUnbindHistory);
+
+}

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

@@ -53,4 +53,13 @@ public interface TenantUnbindRecordService extends IService<TenantUnbindRecord>
      * @param intervene    true:后台审核,false:机构管理员
      */
     void tenantUserUnbindAudit(TenantUnbindRecordWrapper.Audio audio, Long verifyUserId, Boolean intervene);
+
+    /**
+     * 解绑老师
+     *
+     * @param tenantId     机构
+     * @param verityUserId 审核人
+     * @param unbind       解绑信息
+     */
+    void unbindTenant(Long tenantId, Long verityUserId, TenantUnbindRecordWrapper.Unbind unbind);
 }

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

@@ -8,14 +8,18 @@ import java.util.stream.Collectors;
 
 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.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 org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
@@ -94,13 +98,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
     @Autowired
     private SubjectService subjectService;
-    
+
     @Autowired
     private StudentStarDao studentStarDao;
-    
+
     @Autowired
     private StudentService studentService;
-    
+
     @Autowired
     private SysMessageService sysMessageService;
 
@@ -119,6 +123,13 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     @Autowired
     private MusicSheetService musicSheetService;
 
+    @Autowired
+    private TenantUnbindRecordMapper tenantUnbindRecordMapper;
+
+    @Autowired
+    private TenantUnbindHistoryMapper tenantUnbindHistoryMapper;
+
+
     @Override
     public TeacherVo detail(Long userId) {
         TeacherVo detail = baseMapper.detail(userId);
@@ -155,7 +166,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             return page.setRecords(teacherVos);
         }
         //设置声部
-        List<Long> subjectIds = teacherVos.stream().filter(o -> o.getSubjectId() != null).flatMap(o -> Arrays.stream(o.getSubjectId().split(","))).map(Long::parseLong).collect(Collectors.toList());
+        List<Long> subjectIds =
+                teacherVos.stream().filter(o -> o.getSubjectId() != null).flatMap(o -> Arrays.stream(o.getSubjectId().split(","))).map(Long::parseLong).collect(Collectors.toList());
         List<Subject> subjects = subjectService.findBySubjectByIdList(subjectIds);
 
         Map<Long, String> subjectMap = subjects.stream().collect(Collectors.toMap(Subject::getId, Subject::getName));
@@ -277,15 +289,18 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
     @Override
     public HttpResponseResult<Boolean> openLive(Long id) {
-        TeacherTotal teacherTotal = (TeacherTotal) redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(id)).get();
+        TeacherTotal teacherTotal =
+                (TeacherTotal) redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(id)).get();
         if (null == teacherTotal) {
             teacherTotal = new TeacherTotal();
         }
 
         //开通直播需要粉丝数
-        Integer fansNum = Integer.parseInt(sysConfigService.findByParamName(SysConfigConstant.OPEN_LIVE_FANS_NUM).getParamValue());
+        Integer fansNum =
+                Integer.parseInt(sysConfigService.findByParamName(SysConfigConstant.OPEN_LIVE_FANS_NUM).getParamValue());
         //开通直播需要已完成课时数
-        Integer overClass = Integer.parseInt(sysConfigService.findByParamName(SysConfigConstant.OPEN_LIVE_OVER_CLASS).getParamValue());
+        Integer overClass =
+                Integer.parseInt(sysConfigService.findByParamName(SysConfigConstant.OPEN_LIVE_OVER_CLASS).getParamValue());
         //根据老师规则,判断老师直播权限
         if (teacherTotal.getFansNum() >= fansNum && teacherTotal.getExpTime() >= overClass) {
             Teacher teacher = new Teacher();
@@ -401,7 +416,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             if (teacher.getTenantId() != -1L && Boolean.FALSE.equals(teacherSubmitReq.getBindTenant())) {
                 // 老师建立的班级群解散,并解除好友关系
                 List<ImGroupMember> groupMembers = imGroupMemberService.lambdaQuery()
-                        .eq(ImGroupMember::getIsAdmin,true)
+                        .eq(ImGroupMember::getIsAdmin, true)
                         .eq(ImGroupMember::getUserId, teacher.getUserId()).list();
                 if (!groupMembers.isEmpty()) {
                     List<String> groupIdList = groupMembers.stream().map(ImGroupMember::getGroupId).distinct()
@@ -439,7 +454,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             realNameAuthDto.setRealName(teacherSubmitReq.getRealName());
             realNameAuthDto.setSave(false);
 
-            HttpResponseResult<IdcardInfoExtractor> idcardInfoExtractorResult = userFeignService.realNameAuth(realNameAuthDto);
+            HttpResponseResult<IdcardInfoExtractor> idcardInfoExtractorResult =
+                    userFeignService.realNameAuth(realNameAuthDto);
             if (!idcardInfoExtractorResult.getStatus() || null == idcardInfoExtractorResult.getData()) {
                 throw new BizException("实名认证未通过");
             }
@@ -584,15 +600,17 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     @Transactional(rollbackFor = Exception.class)
     public boolean updateStyleVideo(Long userId, List<TeacherStyleVideo> styleVideo, String message) {
 
-        if(styleVideo == null){
+        if (styleVideo == null) {
             styleVideo = new ArrayList<TeacherStyleVideo>();
         }
         //修改老师信息
-        
-        List<TeacherStyleVideo> teacherStyleVideoList = teacherStyleVideoService.list(Wrappers.<TeacherStyleVideo>lambdaQuery()
-                .eq(TeacherStyleVideo::getUserId, userId));
 
-        Map<Long, TeacherStyleVideo> oldMap = teacherStyleVideoList.stream().collect(Collectors.toMap(TeacherStyleVideo::getId, o -> o));
+        List<TeacherStyleVideo> teacherStyleVideoList =
+                teacherStyleVideoService.list(Wrappers.<TeacherStyleVideo>lambdaQuery()
+                        .eq(TeacherStyleVideo::getUserId, userId));
+
+        Map<Long, TeacherStyleVideo> oldMap =
+                teacherStyleVideoList.stream().collect(Collectors.toMap(TeacherStyleVideo::getId, o -> o));
 
         List<TeacherStyleVideo> createList = styleVideo.stream().filter(o -> o.getId() == null)
                 .collect(Collectors.toList());
@@ -605,9 +623,9 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
         List<Long> oldIds = styleVideo.stream().filter(o -> o.getId() != null)
                 .map(TeacherStyleVideo::getId).collect(Collectors.toList());
-        
-        for(TeacherStyleVideo tv : teacherStyleVideoList){
-            if(tv.getAuthStatus() == AuthStatusEnum.DOING){
+
+        for (TeacherStyleVideo tv : teacherStyleVideoList) {
+            if (tv.getAuthStatus() == AuthStatusEnum.DOING) {
                 oldIds.add(tv.getId());
             }
         }
@@ -628,7 +646,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                         .eq(TeacherStyleVideo::getId, o.getId()));
             }
         });
-        
+
         //发送推送
         try {
             //  发送消息
@@ -637,7 +655,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             Map<Long, String> receivers = new HashMap<>();
             receivers.put(userId, user.getPhone());
 
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.CUSTOME_MESSAGE_PUSH, receivers, null, 0,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
+                    MessageTypeEnum.CUSTOME_MESSAGE_PUSH, receivers, null, 0,
                     null, ClientEnum.TEACHER.getCode(), message);
 
         } catch (Exception e) {
@@ -691,7 +710,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
     @Override
     public IPage<MyFens> queryMyFans(IPage<MyFens> page, Long teacherId) {
-        List<MyFens> teacherVos = baseMapper.queryMyFans(page, TeacherQueryInfo.FansQuery.builder().teacherId(teacherId).build());
+        List<MyFens> teacherVos = baseMapper.queryMyFans(page,
+                TeacherQueryInfo.FansQuery.builder().teacherId(teacherId).build());
         return page.setRecords(teacherVos);
     }
 
@@ -734,19 +754,19 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         List<Long> watchTeacherIdList = new ArrayList<Long>();
 
         List<StudentStar> studentStarList = studentStarDao.queryByStudentId(userId);
-        if(studentStarList != null && studentStarList.size() > 0){
-            watchTeacherIdList = studentStarList.stream().map(StudentStar :: getTeacherId).collect(Collectors.toList());
+        if (studentStarList != null && studentStarList.size() > 0) {
+            watchTeacherIdList = studentStarList.stream().map(StudentStar::getTeacherId).collect(Collectors.toList());
         }
 
         Student student = studentService.getById(userId);
         Long subjectId = null;
-        if (student.getSubjectId()!= null) {
+        if (student.getSubjectId() != null) {
             subjectId = Long.parseLong(student.getSubjectId());
         }
 
         List<HotTeacherVo> hotTeacherList = baseMapper.queryHotTeacherList(subjectId);
-        for(HotTeacherVo vo : hotTeacherList){
-            if(watchTeacherIdList.contains(vo.getUserId())){
+        for (HotTeacherVo vo : hotTeacherList) {
+            if (watchTeacherIdList.contains(vo.getUserId())) {
                 vo.setWatch(true);
             }
         }
@@ -806,8 +826,10 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             }
 
             // 老师学生人数统计
-            Map<Long, Integer> studentNumsMap = getBaseMapper().selectTeacherStudentNumberStatInfo(Lists.newArrayList(teacherId)).stream()
-                    .collect(Collectors.toMap(StatGroupWrapper::getId, StatGroupWrapper::getTotal, (o, n) -> n));
+            Map<Long, Integer> studentNumsMap =
+                    getBaseMapper().selectTeacherStudentNumberStatInfo(Lists.newArrayList(teacherId)).stream()
+                            .collect(Collectors.toMap(StatGroupWrapper::getId, StatGroupWrapper::getTotal,
+                                    (o, n) -> n));
 
             teacherInfo.setStudentNums(studentNumsMap.getOrDefault(teacherId, 0));
         }
@@ -856,4 +878,34 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         return wrapper;
     }
 
+    @Override
+    public void updateTenant(TeacherWrapper.UpdateTenant updateTenant) {
+        Teacher teacher = this.getById(updateTenant.getTeacherId());
+        if (teacher.getTenantId().equals(updateTenant.getTenantId())) {
+            return;
+        }
+        Long oldTenantId = teacher.getTenantId();
+        if (oldTenantId != -1L) {
+            //todo 退群,解散群,删好友
+        }
+
+        teacher.setTenantId(updateTenant.getTenantId());
+        this.updateById(teacher);
+
+        List<TenantUnbindRecord> tenantUnbindRecords = tenantUnbindRecordMapper.getRecord(oldTenantId,
+                updateTenant.getTeacherId(), "TEACHER");
+        Optional<TenantUnbindRecord> first = tenantUnbindRecords.stream()
+                .filter(next -> next.getStatus().equals(ETenantUnBindAuditStatus.DOING)).findFirst();
+        if (first.isPresent()) {
+            TenantUnbindRecord tenantUnbindRecord = first.get();
+            tenantUnbindRecord.setStatus(ETenantUnBindAuditStatus.CLOSE);
+            tenantUnbindRecordMapper.updateById(tenantUnbindRecord);
+
+            TenantUnbindHistory history = JSON.parseObject(JSON.toJSONString(tenantUnbindRecord),
+                    TenantUnbindHistory.class);
+            tenantUnbindHistoryMapper.insert(history);
+        }
+
+    }
+
 }

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

@@ -0,0 +1,66 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.BeanUtils;
+import lombok.extern.slf4j.Slf4j;
+import com.yonge.cooleshow.biz.dal.entity.TenantUnbindHistory;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindHistoryWrapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindHistoryMapper;
+import com.yonge.cooleshow.biz.dal.service.TenantUnbindHistoryService;
+
+/**
+ * 机构解绑历史表
+ * 2023-08-18 18:00:10
+ */
+@Slf4j
+@Service
+public class TenantUnbindHistoryServiceImpl extends ServiceImpl<TenantUnbindHistoryMapper, TenantUnbindHistory> implements TenantUnbindHistoryService {
+
+    /**
+     * 查询详情
+     * @param id 详情ID
+     * @return TenantUnbindHistory
+     */
+    @Override
+    public TenantUnbindHistory detail(Long id) {
+
+        return baseMapper.selectById(id);
+    }
+
+    /**
+     * 分页查询
+     * @param page IPage<TenantUnbindHistory>
+     * @param query TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery
+     * @return IPage<TenantUnbindHistory>
+     */
+    @Override
+    public IPage<TenantUnbindHistory> selectPage(IPage<TenantUnbindHistory> page, TenantUnbindHistoryWrapper.TenantUnbindHistoryQuery query) {
+
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+
+    /**
+     * 添加
+     * @param tenantUnbindHistory TenantUnbindHistoryWrapper.TenantUnbindHistory
+     * @return Boolean
+     */
+    @Override
+    public Boolean add(TenantUnbindHistoryWrapper.TenantUnbindHistory tenantUnbindHistory) {
+
+        return this.save(JSON.parseObject(tenantUnbindHistory.jsonString(), TenantUnbindHistory.class));
+    }
+
+    /**
+     * 更新
+     * @param tenantUnbindHistory TenantUnbindHistoryWrapper.TenantUnbindHistory
+     * @return Boolean
+     */
+    @Override
+    public Boolean update(TenantUnbindHistoryWrapper.TenantUnbindHistory tenantUnbindHistory){
+
+        return this.updateById(JSON.parseObject(tenantUnbindHistory.jsonString(), TenantUnbindHistory.class));
+    }
+}

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

@@ -9,20 +9,19 @@ 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.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.TenantUnbindHistory;
 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.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.TenantUnbindHistoryService;
 import com.yonge.cooleshow.biz.dal.service.TenantUnbindRecordService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
@@ -30,12 +29,10 @@ 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.transaction.annotation.Transactional;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
@@ -68,12 +65,6 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
-    private StudentService studentService;
-
-    @Autowired
-    private TeacherService teacherService;
-
-    @Autowired
     private SysConfigService sysConfigService;
 
     @Autowired
@@ -85,6 +76,9 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
     @Autowired
     private SysMessageService sysMessageService;
 
+    @Autowired
+    private TenantUnbindHistoryService tenantUnbindHistoryService;
+
     /**
      * @param id 详情ID
      * @return TenantUnbindRecord
@@ -133,41 +127,42 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
             });
         }
 
-        List<Long> teacherIdList = records.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<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<>();
-        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));
-
-            for (Teacher user : teachers) {
-                String subjectId = user.getSubjectId();
-                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));
-            }
-        }
-
-        for (TenantUnbindRecordWrapper.TenantUnbindRecord next : records) {
-            next.setSubjectId(userIdSubjectIdMap.getOrDefault(next.getUserId(), ""));
-            next.setSubjectName(userIdSubjectNameMap.getOrDefault(next.getUserId(), ""));
-        }
+//        List<Long> teacherIdList = records.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<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<>();
+//        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));
+//
+//            for (Teacher user : teachers) {
+//                String subjectId = user.getSubjectId();
+//                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));
+//            }
+//        }
+//
+//        for (TenantUnbindRecordWrapper.TenantUnbindRecord next : records) {
+//            next.setSubjectId(userIdSubjectIdMap.getOrDefault(next.getUserId(), ""));
+//            next.setSubjectName(userIdSubjectNameMap.getOrDefault(next.getUserId(), ""));
+//        }
         return page.setRecords(records);
     }
 
@@ -210,14 +205,6 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
         if (unbindRecord == null || !ETenantUnBindAuditStatus.DOING.equals(unbindRecord.getStatus())) {
             throw new BizException("审核记录不存在");
         }
-        // 平台介入审核,需要达到审批超时时间
-        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)
@@ -232,10 +219,35 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
                     .eq(Teacher::getUserId, audio.getId())
                     .set(Teacher::getTenantId, -1L));
         }
+
+        // 添加历史记录
+        TenantUnbindHistory history = JSON.parseObject(JSON.toJSONString(unbindRecord), TenantUnbindHistory.class);
+        tenantUnbindHistoryService.save(history);
+
         // 老师端发送消息
         CompletableFuture.runAsync(() -> sendTeacherUnBindMessage(audio, unbindRecord));
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void unbindTenant(Long tenantId, Long verityUserId, TenantUnbindRecordWrapper.Unbind unbind) {
+        Teacher teacher = teacherDao.selectById(unbind.getUserId());
+        if (teacher == null || !teacher.getTenantId().equals(tenantId)) {
+            throw new BizException("老师信息不存在");
+        }
+        teacher.setTenantId(-1L);
+        teacherDao.updateById(teacher);
+        // 如果有申请解绑,更新状态为关闭状态
+        tenantUnbindRecordService.lambdaUpdate()
+                .set(TenantUnbindRecord::getReason, unbind.getReason())
+                .set(TenantUnbindRecord::getVerifyUserId, verityUserId)
+                .set(TenantUnbindRecord::getStatus, ETenantUnBindAuditStatus.CLOSE)
+                .eq(TenantUnbindRecord::getUserId, unbind.getUserId())
+                .eq(TenantUnbindRecord::getUserType, "TEACHER")
+                .eq(TenantUnbindRecord::getStatus, ETenantUnBindAuditStatus.DOING)
+                .update();
+    }
+
     private void sendTeacherUnBindMessage(TenantUnbindRecordWrapper.Audio audio, TenantUnbindRecord record) {
         TenantInfo tenantInfo = tenantInfoService.getById(record.getTenantId());
         if (tenantInfo == null) {

+ 69 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindHistoryWrapper.java

@@ -0,0 +1,69 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Optional;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 机构解绑历史表
+ * 2023-08-18 18:00:10
+ */
+@ApiModel(value = "TenantUnbindHistoryWrapper对象", description = "机构解绑历史表查询对象")
+public class TenantUnbindHistoryWrapper {
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" TenantUnbindHistoryQuery-机构解绑历史表")
+    public static class TenantUnbindHistoryQuery implements QueryInfo {
+
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        @ApiModelProperty("关键字匹配")
+        private String keyword;
+
+        @ApiModelProperty("用户ID")
+        private Long userId;
+
+        @ApiModelProperty("机构ID")
+        private Long tenantId;
+
+        public String getKeyword() {
+            return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
+        }
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static TenantUnbindHistoryQuery from(String json) {
+            return JSON.parseObject(json, TenantUnbindHistoryQuery.class);
+        }
+    }
+
+    @ApiModel(" TenantUnbindHistory-机构解绑历史表")
+    public static class TenantUnbindHistory {
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static TenantUnbindHistory from(String json) {
+            return JSON.parseObject(json, TenantUnbindHistory.class);
+        }
+    }
+
+}

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.wrapper;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -50,8 +51,8 @@ public class TenantUnbindRecordWrapper {
         @ApiModelProperty("用户类型,TEACHER/STUDENT")
         private String userType;
 
-        @ApiModelProperty("审核状态 DOING、审核中 PASS、通过 UNPASS、不通过")
-        private String status;
+        @ApiModelProperty("审核状态 DOING、审核中 PASS、通过 UNPASS、不通过,取消:CANCEL,关闭:CLOSE")
+        private ETenantUnBindAuditStatus status;
 
         public String getKeyword() {
             return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
@@ -121,8 +122,8 @@ public class TenantUnbindRecordWrapper {
         @ApiModelProperty("解绑理由")
         private String unbindReason;
 
-        @ApiModelProperty("审核状态 DOING、审核中 PASS、通过 UNPASS、不通过")
-        private String status;
+        @ApiModelProperty("审核状态 DOING、审核中 PASS、通过 UNPASS、不通过,撤销:CANCEL,关闭:CLOSE")
+        private ETenantUnBindAuditStatus status;
 
         @ApiModelProperty("审核人")
         private Long verifyUserId;
@@ -142,8 +143,8 @@ public class TenantUnbindRecordWrapper {
         @ApiModelProperty("头像")
         private String avatar;
 
-        @ApiModelProperty("声部Id")
-        private String subjectId;
+//        @ApiModelProperty("声部Id")
+//        private String subjectId;
 
         @ApiModelProperty("声部名称")
         private String subjectName;
@@ -177,4 +178,22 @@ public class TenantUnbindRecordWrapper {
         private String reason;
     }
 
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("机构主动解绑老师")
+    public static class Unbind {
+
+        @ApiModelProperty("解绑的用户ID")
+        @NotNull
+        private Long userId;
+
+        @ApiModelProperty("审核理由")
+        @NotNull
+        private String reason;
+    }
+
 }

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

@@ -9,6 +9,7 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
@@ -99,12 +100,27 @@ public class TeacherWrapper {
 
     @Data
     @ApiModel("解绑机构")
-    public static class UnbindTenant{
+    public static class UnbindTenant {
 
         @ApiModelProperty("短信验证码")
+        @NotNull
         private String code;
 
         @ApiModelProperty("解绑原因")
+        @NotNull
         private String unbindReason;
     }
+
+    @Data
+    @ApiModel("修改机构")
+    public static class UpdateTenant {
+
+        @ApiModelProperty("老师ID")
+        @NotNull
+        private Long teacherId;
+
+        @ApiModelProperty("机构ID")
+        @NotNull
+        private Long tenantId;
+    }
 }

+ 29 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantUnbindHistoryMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.yonge.cooleshow.biz.dal.mapper.TenantUnbindHistoryMapper">
+
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+        t.id_ AS id
+        , t.tenant_id_ AS tenantId
+        , t.tenant_name_ AS tenantName
+        , t.user_id_ AS userId
+        , t.user_name_ AS userName
+        , t.phone_ AS phone
+        , t.user_type_ AS userType
+        , t.unbind_reason_ AS unbindReason
+        , t.status_ AS status
+        , t.verify_user_id_ AS verifyUserId
+        , t.reason_ AS reason
+        , t.intervene_time_ AS interveneTime
+        , t.create_time_ AS createTime
+    </sql>
+
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.entity.TenantUnbindHistory">
+        SELECT
+        <include refid="baseColumns" />
+        FROM tenant_unbind_history t
+        order by id_ desc
+    </select>
+
+</mapper>

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

@@ -5,7 +5,10 @@
     <sql id="baseColumns">
         t.id_ AS id
         , t.tenant_id_ AS tenantId
+        , t.tenant_name_ AS tenantName
         , t.user_id_ AS userId
+        , t.user_name_ AS userName
+        , t.phone_ AS phone
         , t.user_type_ AS userType
         , t.unbind_reason_ AS unbindReason
         , t.status_ AS status
@@ -20,14 +23,11 @@
             resultType="com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper$TenantUnbindRecord">
         SELECT
         <include refid="baseColumns"/>
-        ,ti.name_ as tenantName
         ,ti.province_code_ as provinceCode
         ,ti.city_code_ as cityCode
         ,ti.region_code_ as regionCode
         ,ti.username_ as tenantUserName
         ,ti.phone_ as tenantUserPhone
-        ,su.username_ as userName
-        ,su.phone_ as phone
         ,su.avatar_ as avatar
         FROM tenant_unbind_record t
         LEFT JOIN tenant_info ti ON ti.id_ = t.tenant_id_
@@ -58,6 +58,13 @@
                 AND t.status_ = #{param.status}
             </if>
         </where>
-        order by t.status_='DOING' desc, t.id_
+        order by t.status_='DOING' desc, t.update_time_ desc
+    </select>
+
+    <select id="getRecord" resultType="com.yonge.cooleshow.biz.dal.entity.TenantUnbindRecord">
+        SELECT
+        <include refid="baseColumns"/>
+        FROM tenant_unbind_record t
+        where tenant_id_ = #{tenantId} and user_id_ = #{userId} and user_type_ = #{userType}
     </select>
 </mapper>

+ 59 - 7
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -7,11 +7,14 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.TeacherDto;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 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.service.SmsCodeService;
+import com.yonge.cooleshow.biz.dal.service.SubjectService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
 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.vo.MyFens;
 import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
@@ -20,6 +23,7 @@ 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.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.util.StringUtil;
@@ -31,6 +35,7 @@ import io.swagger.annotations.ApiParam;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -41,7 +46,9 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/teacher")
@@ -61,6 +68,12 @@ public class TeacherController extends BaseController {
     @Autowired
     private TenantUnbindRecordService tenantUnbindRecordService;
 
+    @Autowired
+    private TenantInfoService tenantInfoService;
+
+    @Autowired
+    private SubjectService subjectService;
+
     @ApiOperation(value = "我的-查询教师基本信息")
     @GetMapping("/queryUserInfo")
     public HttpResponseResult<TeacherHomeVo> queryUserInfo() {
@@ -191,14 +204,11 @@ public class TeacherController extends BaseController {
 
     @PostMapping("/unbindTenant")
     @ApiOperation(value = "解绑机构申请")
-    public HttpResponseResult<Boolean> unbindTenant(@RequestBody TeacherWrapper.UnbindTenant unbindTenant) {
+    public HttpResponseResult<Boolean> unbindTenant(@Validated @RequestBody TeacherWrapper.UnbindTenant unbindTenant) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        if (StringUtils.isEmpty(unbindTenant.getCode())) {
-            return failed("验证码不能为空");
-        }
         boolean validCode = smsCodeService.verifyValidCode(user.getPhone(), unbindTenant.getCode(), "");
         if (!validCode) {
             return failed("验证码错误");
@@ -216,18 +226,60 @@ public class TeacherController extends BaseController {
                 .eq(TenantUnbindRecord::getTenantId, user.getTenantId())
                 .eq(TenantUnbindRecord::getUserType, "TEACHER")
                 .eq(TenantUnbindRecord::getUserId, user.getId())
-                .eq(TenantUnbindRecord::getStatus, ETenantUnBindAuditStatus.DOING)
                 .last("limit 1").one();
-        if (one != null) {
+        if (one != null && ETenantUnBindAuditStatus.DOING.equals(one.getStatus())) {
             return failed("请勿重复提交申请");
         }
+        TenantInfo tenantInfo = tenantInfoService.getById(user.getTenantId());
         TenantUnbindRecord tenantUnbindRecord = new TenantUnbindRecord();
         tenantUnbindRecord.setTenantId(user.getTenantId());
+        tenantUnbindRecord.setTenantName(tenantInfo == null ? "" : tenantInfo.getName());
         tenantUnbindRecord.setUserId(user.getId());
+        tenantUnbindRecord.setUserName(user.getRealName());
+        tenantUnbindRecord.setPhone(user.getPhone());
+
+        String subjectId = teacher.getSubjectId();
+        if (StringUtils.isNotEmpty(subjectId)) {
+            List<Long> subjectIdList = Arrays.stream(subjectId.split(",")).map(Long::valueOf)
+                    .collect(Collectors.toList());
+            List<Subject> subject = subjectService.findBySubjectByIdList(subjectIdList);
+            String subjectName = subject.stream().map(Subject::getName).collect(Collectors.joining(","));
+            tenantUnbindRecord.setSubjectName(subjectName);
+        }
+
         tenantUnbindRecord.setUserType("TEACHER");
         tenantUnbindRecord.setUnbindReason(unbindTenant.getUnbindReason());
         tenantUnbindRecord.setStatus(ETenantUnBindAuditStatus.DOING);
-        tenantUnbindRecordService.save(tenantUnbindRecord);
+        tenantUnbindRecordService.saveOrUpdate(tenantUnbindRecord);
+
+        if (one != null) {
+            tenantUnbindRecordService.lambdaUpdate()
+                    .set(TenantUnbindRecord::getVerifyUserId, null)
+                    .set(TenantUnbindRecord::getReason, null)
+                    .set(TenantUnbindRecord::getInterveneTime, null)
+                    .eq(TenantUnbindRecord::getId, one.getId())
+                    .update();
+        }
         return succeed();
     }
+
+    @PostMapping("/unbindTenantCancel")
+    @ApiOperation(value = "解绑机构申请撤销")
+    public HttpResponseResult<Boolean> unbindTenantCancel() {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        boolean update = tenantUnbindRecordService.lambdaUpdate()
+                .eq(TenantUnbindRecord::getUserId, user.getId())
+                .eq(TenantUnbindRecord::getTenantId, user.getTenantId())
+                .eq(TenantUnbindRecord::getStatus, ETenantUnBindAuditStatus.DOING)
+                .set(TenantUnbindRecord::getStatus, ETenantUnBindAuditStatus.CANCEL)
+                .update();
+        if (!update) {
+            throw new BizException("未查询到提交的申请记录");
+        }
+        return succeed();
+
+    }
 }

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

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantInfoWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.security.SecurityConstants;
@@ -50,31 +51,32 @@ public class TenantInfoController extends BaseController {
     private SmsCodeService smsCodeService;
 
     @ApiOperation(value = "发送登录短信验证码")
-    @ApiImplicitParams({  @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String") })
+    @ApiImplicitParams({@ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required =
+                    true, dataType = "String")})
     @PostMapping(value = "/sendSmsCode")
-    public Object sendLoginVerifyCode(String mobile,String type) throws Exception {
+    public Object sendLoginVerifyCode(String mobile, String type) throws Exception {
         smsCodeService.sendValidCode(mobile, type, ClientEnum.SYSTEM);
         return succeed();
     }
 
     @ApiOperation(value = "校验短信验证码")
-    @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
+    @ApiImplicitParams({@ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
             @ApiImplicitParam(name = "code", value = "短信验证码", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String") })
+            @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required =
+                    true, dataType = "String")})
     @PostMapping(value = "/verifySmsCode")
-    public Object verifySmsCode(String phone,String code,String type) {
-        if(StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)){
+    public Object verifySmsCode(String phone, String code, String type) {
+        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)) {
             return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
         }
-        if(smsCodeService.verifyValidCode(phone,code,type)){
+        if (smsCodeService.verifyValidCode(phone, code, type)) {
             return succeed();
         }
         return failed("验证码校验失败");
     }
 
 
-
     /**
      * 修改数据
      */
@@ -93,7 +95,7 @@ public class TenantInfoController extends BaseController {
     @PostMapping("/detail")
     @ApiOperation(value = "查询详细", notes = "查询详细")
 //    @PreAuthorize("@pcs.hasPermissions('tenantInfoUpdate/detail')")
-    public HttpResponseResult<TenantInfoWrapper.TenantInfo> detail(@RequestParam("id")Long id) {
+    public HttpResponseResult<TenantInfoWrapper.TenantInfo> detail(@RequestParam("id") Long id) {
         TenantInfoWrapper.TenantInfo info = tenantInfoService.detailTenantInfo(id);
 
         return succeed(info);

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

@@ -6,8 +6,6 @@ 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.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;
@@ -25,6 +23,8 @@ 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;
+
 
 @Slf4j
 @Validated
@@ -36,16 +36,10 @@ public class TenantUnbindRecordController extends BaseController {
     @Autowired
     private TenantUnbindRecordService tenantUnbindRecordService;
 
-    @Autowired
-    private SysAreaService sysAreaService;
-
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
-    private EmployeeService employeeService;
-
-    @Autowired
     private TenantStaffService tenantStaffService;
 
 
@@ -67,13 +61,25 @@ public class TenantUnbindRecordController extends BaseController {
             throw new BizException("请登录");
         }
         Long id = sysUserFeignService.queryUserInfo().getId();
-        TenantStaff employeeVo = tenantStaffService.lambdaQuery().eq(TenantStaff::getUserId,id)
+        TenantStaff employeeVo = tenantStaffService.lambdaQuery().eq(TenantStaff::getUserId, id)
                 .last("limit 1").one();
         if (employeeVo == null || UserLockFlag.LOCKED.equals(employeeVo.getStatus())) {
             throw new BizException("权限不足");
         }
-        tenantUnbindRecordService.tenantUserUnbindAudit(audio, sysUser.getId(),false);
+        tenantUnbindRecordService.tenantUserUnbindAudit(audio, sysUser.getId(), false);
+        return succeed();
+    }
+
+    @PostMapping("/unbindTenant")
+    @ApiOperation(value = "机构解绑")
+    public HttpResponseResult<Boolean> unbindTenant(@Validated @RequestBody TenantUnbindRecordWrapper.Unbind unbind) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("请登录");
+        }
+        tenantUnbindRecordService.unbindTenant(sysUser.getTenantId(), sysUser.getId(), unbind);
         return succeed();
+
     }