浏览代码

Merge remote-tracking branch 'origin/feature/0721-tenant' into feature/0721-tenant

zouxuan 2 年之前
父节点
当前提交
8c03e23019
共有 13 个文件被更改,包括 404 次插入68 次删除
  1. 74 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindRecordController.java
  2. 27 23
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantUnbindRecord.java
  3. 10 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantUnbindRecordMapper.java
  4. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantActivationCodeService.java
  5. 14 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantUnbindRecordService.java
  6. 55 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  7. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantInfoServiceImpl.java
  8. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantUnbindRecordServiceImpl.java
  9. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantActivationCodeWrapper.java
  10. 98 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindRecordWrapper.java
  11. 4 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantActivationCodeMapper.xml
  12. 42 12
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantUnbindRecordMapper.xml
  13. 73 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/TenantActivationCodeController.java

+ 74 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantUnbindRecordController.java

@@ -0,0 +1,74 @@
+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.yonge.cooleshow.biz.dal.entity.SysArea;
+import com.yonge.cooleshow.biz.dal.service.SysAreaService;
+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;
+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;
+
+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;
+
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/tenantUnbindRecord")
+@Api(tags = "机构解绑申请记录")
+public class TenantUnbindRecordController extends BaseController {
+
+    @Autowired
+    private TenantUnbindRecordService tenantUnbindRecordService;
+
+    @Autowired
+    private SysAreaService sysAreaService;
+
+
+    @ApiOperation(value = "查询分页", notes = "机构解绑申请记录- 传入 TenantUnbindRecordVo.TenantUnbindRecordQuery")
+    @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()));
+    }
+
+
+}

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

@@ -22,48 +22,52 @@ import java.util.Date;
 @TableName("tenant_unbind_record")
 public class TenantUnbindRecord implements Serializable {
 
-    @ApiModelProperty("主键ID") 
-	    @TableId(value = "id_")
-	    private Long id;
+    @ApiModelProperty("主键ID")
+    @TableId(value = "id_")
+    private Long id;
 
-    @ApiModelProperty("机构ID") 
-	@TableField(value = "tenant_id_")
+    @ApiModelProperty("机构ID")
+    @TableField(value = "tenant_id_")
     private Long tenantId;
 
-    @ApiModelProperty("用户ID") 
-	@TableField(value = "user_id_")
+    @ApiModelProperty("用户ID")
+    @TableField(value = "user_id_")
     private Long userId;
 
-    @ApiModelProperty("用户类型") 
-	@TableField(value = "user_type_")
+    @ApiModelProperty("手机号")
+    @TableField(value = "phone_")
+    private String phone;
+
+    @ApiModelProperty("用户类型")
+    @TableField(value = "user_type_")
     private String userType;
 
-    @ApiModelProperty("解绑理由") 
-	@TableField(value = "unbind_reason_")
+    @ApiModelProperty("解绑理由")
+    @TableField(value = "unbind_reason_")
     private String unbindReason;
 
-    @ApiModelProperty("审核状态 DOING、审核中 PASS、通过 UNPASS、不通过") 
-	@TableField(value = "status_")
+    @ApiModelProperty("审核状态 DOING、审核中 PASS、通过 UNPASS、不通过")
+    @TableField(value = "status_")
     private String status;
 
-    @ApiModelProperty("审核人") 
-	@TableField(value = "verify_user_id_")
+    @ApiModelProperty("审核人")
+    @TableField(value = "verify_user_id_")
     private Long verifyUserId;
 
-    @ApiModelProperty("审核理由") 
-	@TableField(value = "reason_")
+    @ApiModelProperty("审核理由")
+    @TableField(value = "reason_")
     private String reason;
 
-    @ApiModelProperty("后台介入时间") 
-	@TableField(value = "intervene_time_")
+    @ApiModelProperty("后台介入时间")
+    @TableField(value = "intervene_time_")
     private Date interveneTime;
 
-    @ApiModelProperty("更新时间") 
-	@TableField(value = "update_time_")
+    @ApiModelProperty("更新时间")
+    @TableField(value = "update_time_")
     private Date updateTime;
 
-    @ApiModelProperty("创建时间") 
-	@TableField(value = "create_time_")
+    @ApiModelProperty("创建时间")
+    @TableField(value = "create_time_")
     private Date createTime;
 
 }

+ 10 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantUnbindRecordMapper.java

@@ -16,12 +16,14 @@ import com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper;
 @Repository
 public interface TenantUnbindRecordMapper extends BaseMapper<TenantUnbindRecord> {
 
-	/**
-	 * 分页查询
-	 * @param page IPage<TenantUnbindRecordWrapper.TenantUnbindRecord>
-	 * @param param TenantUnbindRecordWrapper.TenantUnbindRecordQuery
-	 * @return List<TenantUnbindRecordWrapper.TenantUnbindRecord>
-	 */
-	List<TenantUnbindRecord> selectPage(@Param("page") IPage<TenantUnbindRecord> page, @Param("param") TenantUnbindRecordWrapper.TenantUnbindRecordQuery param);
-	
+    /**
+     * 分页查询
+     *
+     * @param page  IPage<TenantUnbindRecordWrapper.TenantUnbindRecord>
+     * @param param TenantUnbindRecordWrapper.TenantUnbindRecordQuery
+     * @return List<TenantUnbindRecordWrapper.TenantUnbindRecord>
+     */
+    List<TenantUnbindRecordWrapper.TenantUnbindRecord> selectPage(@Param("page") IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> page,
+                                                                  @Param("param") TenantUnbindRecordWrapper.TenantUnbindRecordQuery param);
+
 }

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

@@ -44,4 +44,6 @@ public interface TenantActivationCodeService extends IService<TenantActivationCo
      Boolean update(TenantActivationCodeWrapper.TenantActivationCode tenantActivationCode);
 
     void sendActivationCode(Long tenantId, Long tenantAlbumPurchaseId, List<String> activationCodeList, List<Long> studentIdList);
+
+    void active(String activationCode, Long studentId);
 }

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

@@ -9,35 +9,40 @@ import com.yonge.cooleshow.biz.dal.entity.TenantUnbindRecord;
  * 机构解绑申请记录
  * 2023-07-21 17:32:49
  */
-public interface TenantUnbindRecordService extends IService<TenantUnbindRecord>  {
+public interface TenantUnbindRecordService extends IService<TenantUnbindRecord> {
 
-	/**
+    /**
      * 查询详情
+     *
      * @param id 详情ID
      * @return TenantUnbindRecord
      */
-	TenantUnbindRecord detail(Long id);
+    TenantUnbindRecord detail(Long id);
 
     /**
      * 分页查询
-     * @param page IPage<TenantUnbindRecord>
+     *
+     * @param page  IPage<TenantUnbindRecord>
      * @param query TenantUnbindRecordWrapper.TenantUnbindRecordQuery
      * @return IPage<TenantUnbindRecord>
      */
-    IPage<TenantUnbindRecord> selectPage(IPage<TenantUnbindRecord> page, TenantUnbindRecordWrapper.TenantUnbindRecordQuery query);
-	
+    IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> selectPage(IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> page,
+                                                                   TenantUnbindRecordWrapper.TenantUnbindRecordQuery query);
+
     /**
      * 添加
+     *
      * @param tenantUnbindRecord TenantUnbindRecordWrapper.TenantUnbindRecord
      * @return Boolean
      */
-     Boolean add(TenantUnbindRecordWrapper.TenantUnbindRecord tenantUnbindRecord);   
+    Boolean add(TenantUnbindRecordWrapper.TenantUnbindRecord tenantUnbindRecord);
 
     /**
      * 更新
+     *
      * @param tenantUnbindRecord TenantUnbindRecordWrapper.TenantUnbindRecord
      * @return Boolean
      */
-     Boolean update(TenantUnbindRecordWrapper.TenantUnbindRecord tenantUnbindRecord);
-     
+    Boolean update(TenantUnbindRecordWrapper.TenantUnbindRecord tenantUnbindRecord);
+
 }

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

@@ -8,17 +8,22 @@ import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
+import com.yonge.cooleshow.biz.dal.entity.TenantAlbumPurchase;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantActivationCodeMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumPurchaseMapper;
 import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.toolset.base.exception.BizException;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -37,6 +42,9 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
     @Autowired
     private SysUserMapper sysUserMapper;
 
+    @Autowired
+    private TenantAlbumPurchaseMapper tenantAlbumPurchaseMapper;
+
     /**
      * 查询详情
      *
@@ -135,4 +143,51 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
             }
         }
     }
+
+    @Override
+    public void active(String activationCode, Long studentId) {
+        Student student = studentDao.selectById(studentId);
+        if (student == null) {
+            throw new BizException("学生不存在");
+        }
+        Long tenantId = -1L;
+        if (student.getTenantId() != null) {
+            tenantId = student.getTenantId();
+        }
+
+        TenantActivationCode code = this.lambdaQuery().eq(TenantActivationCode::getTenantId, tenantId)
+                .eq(TenantActivationCode::getActivationCode, activationCode)
+                .last("limit 1").one();
+        if (code == null) {
+            throw new BizException("激活码不存在");
+        }
+        if (Boolean.TRUE.equals(code.getActivationStatus())) {
+            throw new BizException("激活码已经被使用");
+        }
+
+        // 通过状态和ID同时判断更新是否存在竞争
+        boolean update = this.lambdaUpdate()
+                .set(TenantActivationCode::getActivationStatus, true)
+                .set(TenantActivationCode::getActivationUserId, student.getUserId())
+                .set(TenantActivationCode::getActivationTime, new Date())
+                .eq(TenantActivationCode::getId, code.getId())
+                .eq(TenantActivationCode::getActivationStatus, false)
+                .update();
+        if (!update) {
+            throw new BizException("激活码已经被使用");
+        }
+
+        // todo 更新会员信息,如果更新异常,回滚激活码
+
+        // 更新购买记录中激活码使用统计数量值
+        Integer activeCodeNumber = this.lambdaQuery()
+                .eq(TenantActivationCode::getTenantId, tenantId)
+                .eq(TenantActivationCode::getTenantAlbumPurchaseId, code.getTenantAlbumPurchaseId())
+                .eq(TenantActivationCode::getActivationStatus, true).count();
+
+        TenantAlbumPurchase tenantAlbumPurchase = new TenantAlbumPurchase();
+        tenantAlbumPurchase.setId(code.getTenantAlbumPurchaseId());
+        tenantAlbumPurchase.setActiveQuantity(activeCodeNumber);
+        tenantAlbumPurchaseMapper.updateById(tenantAlbumPurchase);
+    }
 }

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

@@ -32,7 +32,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
      */
 	@Override
     public TenantInfo detail(Long id) {
-        if (id == null && id == -1) {
+        if (id == null || id == -1) {
             return null;
         }
         

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

@@ -37,7 +37,7 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
      * @return IPage<TenantUnbindRecord>
      */
     @Override
-    public IPage<TenantUnbindRecord> selectPage(IPage<TenantUnbindRecord> page, TenantUnbindRecordWrapper.TenantUnbindRecordQuery query) {
+    public IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> selectPage(IPage<TenantUnbindRecordWrapper.TenantUnbindRecord> page, TenantUnbindRecordWrapper.TenantUnbindRecordQuery query) {
         
         return page.setRecords(baseMapper.selectPage(page, query));
     }

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

@@ -46,6 +46,9 @@ public class TenantActivationCodeWrapper {
         @ApiModelProperty("激活状态")
         private Boolean activationStatus;
 
+        @ApiModelProperty("激活手机号码")
+        private String activationPhone;
+
         @ApiModelProperty("激活开始")
         private Date activationStartTime;
 

+ 98 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantUnbindRecordWrapper.java

@@ -4,14 +4,15 @@ 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;
 
+import java.util.Date;
+import java.util.Optional;
+
 /**
  * 机构解绑申请记录
  * 2023-07-21 17:32:49
@@ -20,25 +21,37 @@ import org.apache.commons.lang3.StringUtils;
 public class TenantUnbindRecordWrapper {
 
     @Data
-	@Builder
+    @Builder
     @NoArgsConstructor
     @AllArgsConstructor
     @ApiModel(" TenantUnbindRecordQuery-机构解绑申请记录")
     public static class TenantUnbindRecordQuery implements QueryInfo {
-    
-    	@ApiModelProperty("当前页")
+
+        @ApiModelProperty("当前页")
         private Integer page;
-        
+
         @ApiModelProperty("分页行数")
         private Integer rows;
-        
+
         @ApiModelProperty("关键字匹配")
-		private String keyword;
-        
+        private String keyword;
+
+        @ApiModelProperty("省份")
+        private String provinceCode;
+
+        @ApiModelProperty("城市")
+        private String cityCode;
+
+        @ApiModelProperty("区域")
+        private String regionCode;
+
+        @ApiModelProperty("用户类型,TEACHER/STUDENT")
+        private String userType;
+
         public String getKeyword() {
             return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
         }
-        
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -46,11 +59,82 @@ public class TenantUnbindRecordWrapper {
         public static TenantUnbindRecordQuery from(String json) {
             return JSON.parseObject(json, TenantUnbindRecordQuery.class);
         }
-    }  
+    }
 
-	@ApiModel(" TenantUnbindRecord-机构解绑申请记录")
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" TenantUnbindRecord-机构解绑申请记录")
     public static class TenantUnbindRecord {
-        
+
+        @ApiModelProperty("主键ID")
+        private Long id;
+
+        @ApiModelProperty("机构ID")
+        private Long tenantId;
+
+        @ApiModelProperty("机构名称")
+        private String tenantName;
+
+        @ApiModelProperty("机构联系人")
+        private String tenantUserName;
+
+        @ApiModelProperty("机构人手机号")
+        private String tenantUserPhone;
+
+        @ApiModelProperty("省码")
+        private Integer provinceCode;
+
+        @ApiModelProperty("市码")
+        private Integer cityCode;
+
+        @ApiModelProperty("区码")
+        private Integer regionCode;
+
+        @ApiModelProperty("省")
+        private String provinceName;
+
+        @ApiModelProperty("市")
+        private String cityName;
+
+        @ApiModelProperty("区")
+        private String regionName;
+
+        @ApiModelProperty("用户ID")
+        private Long userId;
+
+        @ApiModelProperty("申请人姓名")
+        private String userName;
+
+        @ApiModelProperty("手机号")
+        private String phone;
+
+        @ApiModelProperty("用户类型")
+        private String userType;
+
+        @ApiModelProperty("解绑理由")
+        private String unbindReason;
+
+        @ApiModelProperty("审核状态 DOING、审核中 PASS、通过 UNPASS、不通过")
+        private String status;
+
+        @ApiModelProperty("审核人")
+        private Long verifyUserId;
+
+        @ApiModelProperty("审核理由")
+        private String reason;
+
+        @ApiModelProperty("后台介入时间")
+        private Date interveneTime;
+
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -58,6 +142,6 @@ public class TenantUnbindRecordWrapper {
         public static TenantUnbindRecord from(String json) {
             return JSON.parseObject(json, TenantUnbindRecord.class);
         }
-	}
+    }
 
 }

+ 4 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantActivationCodeMapper.xml

@@ -40,6 +40,9 @@
             <if test="param.activationStatus != null">
                 AND t.activation_status_ = #{param.activationStatus}
             </if>
+            <if test="param.activationPhone != null">
+                AND t.activation_phone_ = #{param.activationPhone}
+            </if>
             <if test="param.activationStartTime != null">
                 AND t.activation_time_ >= #{param.activationStartTime}
             </if>
@@ -47,5 +50,6 @@
                 AND #{param.activationEndTime} >= t.activation_time_
             </if>
         </where>
+        order by t.activation_status_ asc, t.id_ desc
     </select>
 </mapper>

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

@@ -1,14 +1,12 @@
 <?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.TenantUnbindRecordMapper">
-
-	 
-    
     <!-- 表字段 -->
     <sql id="baseColumns">
-         t.id_ AS id
+        t.id_ AS id
         , t.tenant_id_ AS tenantId
         , t.user_id_ AS userId
+        , t.phone_ AS phone
         , t.user_type_ AS userType
         , t.unbind_reason_ AS unbindReason
         , t.status_ AS status
@@ -17,12 +15,44 @@
         , t.intervene_time_ AS interveneTime
         , t.update_time_ AS updateTime
         , t.create_time_ AS createTime
-        </sql> 
-    
-    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.entity.TenantUnbindRecord">
-		SELECT         
-        	<include refid="baseColumns" />
-		FROM tenant_unbind_record t
-	</select>
-    
+    </sql>
+
+    <select id="selectPage"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.TenantUnbindRecordWrapper$TenantUnbindRecord">
+        SELECT
+        <include refid="baseColumns"/>
+        ,ti.province_code_ as provinceCode
+        ,ti.city_code_ as cityCide
+        ,ti.region_code_ as regionCide
+        ,ti.username_ as tenantUserName
+        ,ti.phone_ as tenantUserPhone
+        ,su.username_ as userName
+        FROM tenant_unbind_record t
+        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">
+                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},'%')
+                )
+            </if>
+            <if test="param.userType != null">
+                AND t.user_type_ = #{param.userType}
+            </if>
+            <if test="param.provinceCode != null">
+                AND ti.province_code_ = #{param.provinceCode}
+            </if>
+            <if test="param.cityCode != null">
+                AND ti.city_code_ = #{param.cityCode}
+            </if>
+            <if test="param.regionCode != null">
+                AND ti.region_code_ = #{param.regionCode}
+            </if>
+        </where>
+        order by t.id_ desc
+    </select>
 </mapper>

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

@@ -0,0 +1,73 @@
+package com.yonge.cooleshow.student.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.webportal.exception.BizException;
+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.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
+import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/tenantActivationCode")
+@Api(tags = "机构激活码")
+public class TenantActivationCodeController extends BaseController {
+
+    @Autowired
+    private TenantActivationCodeService tenantActivationCodeService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private StudentService studentService;
+
+    @ApiOperation(value = "查询分页", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCodeQuery")
+    @PostMapping("/page")
+    public HttpResponseResult<PageInfo<TenantActivationCodeWrapper.TenantActivationCode>> page(
+            @RequestBody TenantActivationCodeWrapper.TenantActivationCodeQuery query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || null == sysUser.getId()) {
+            throw new BizException("请登录");
+        }
+        Student student = studentService.getById(sysUser.getId());
+        if (student == null) {
+            throw new BizException("学生不存在");
+        }
+        query.setActivationPhone(sysUser.getPhone());
+        query.setTenantId(student.getTenantId());
+        // 查询数据
+        IPage<TenantActivationCodeWrapper.TenantActivationCode> pages =
+                tenantActivationCodeService.selectPage(QueryInfo.getPage(query), query);
+        return succeed(QueryInfo.pageInfo(pages, pages.getRecords()));
+    }
+
+    @ApiOperation(value = "激活激活码")
+    @PostMapping("/active")
+    public HttpResponseResult<Boolean> active(@RequestParam("activationCode") String activationCode) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || null == sysUser.getId()) {
+            throw new BizException("请登录");
+        }
+        tenantActivationCodeService.active(activationCode, sysUser.getId());
+        return succeed();
+    }
+}