Browse Source

1.激活码添加批量操作接口
2.机构员工头像修改

yuanliang 1 year ago
parent
commit
d7d14bf84a

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

@@ -2,7 +2,6 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.yonge.cooleshow.admin.io.request.TeacherBindingUserVo;
-import com.yonge.cooleshow.admin.io.request.coupon.CouponIssueVo;
 import com.yonge.cooleshow.biz.dal.queryInfo.TeacherBindingUserQueryInfo;
 import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
@@ -12,7 +11,6 @@ import com.yonge.cooleshow.biz.dal.vo.userBindingTeacher.UserBindingTeacherWrapp
 import com.yonge.cooleshow.admin.io.request.teacher.TeacherVO;
 import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
-import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -22,7 +20,6 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Date;
 import java.util.List;
-import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -33,7 +30,6 @@ import javax.validation.Valid;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -166,6 +162,8 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "新增或修改", notes = "传入teacher")
     @PreAuthorize("@pcs.hasPermissions('teacher/submit')")
     public HttpResponseResult<Boolean> submit(@Valid @RequestBody TeacherSubmitReq teacherSubmitReq) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        teacherSubmitReq.setUpdateBy(sysUser.getId());
         return teacherService.submit(teacherSubmitReq);
     }
 
@@ -173,7 +171,8 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "新增或修改", notes = "传入teacher")
     @PreAuthorize("@pcs.hasPermissions('teacher/updateTenant')")
     public HttpResponseResult<Boolean> updateTenant(@Valid @RequestBody TeacherWrapper.UpdateTenant updateTenant) {
-        teacherService.updateTenant(updateTenant);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        teacherService.updateTenant(updateTenant,sysUser.getId());
         return succeed();
     }
 

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TeacherSubmitReq.java

@@ -62,6 +62,9 @@ public class TeacherSubmitReq implements Serializable {
     @ApiModelProperty("老师头像")
     private String avatar;
 
+    @ApiModelProperty(value = "后台修改人",hidden = true)
+    private Long updateBy;
+
     public Long getUserId() {
         return userId;
     }

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

@@ -176,7 +176,7 @@ public interface TeacherService extends IService<Teacher> {
      */
     TeacherWrapper.TeacherStatInfo findTeacherStatInfoById(Long userId);
 
-    void updateTenant(TeacherWrapper.UpdateTenant updateTenant);
+    void updateTenant(TeacherWrapper.UpdateTenant updateTenant,Long userId);
 
     Long teacherSettlementFrom(Long teacherId);
 }

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
@@ -77,4 +78,8 @@ public interface TenantActivationCodeService extends IService<TenantActivationCo
     void activeById(String id, Long userId);
 
     void resend(String code, Long userId, Long tenantId, Long tenantAlbumPurchaseId);
+
+    void batchSendCancel(TenantInfo tenantInfo, String ids);
+
+    void batchResend(TenantInfo tenantInfo, Long tenantAlbumPurchaseId, List<String> activationCodeList, List<Long> studentIdList);
 }

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

@@ -1,56 +1,11 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.TEACHER_TEMP_LIVE_ROOM;
-
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-
-import javax.annotation.Resource;
-
 import com.alibaba.fastjson.JSON;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
-import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumRefMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindHistoryMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
-import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
-import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.vo.MusicSheetUploadCountVo;
-import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
-import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
-import com.yonge.cooleshow.common.enums.ESettlementFrom;
-import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
-<<<<<<< Updated upstream
-=======
-import com.yonge.cooleshow.common.enums.UserFirstTimeTypeEnum;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
-import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.base.util.StringUtil;
-import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
-import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
-import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
-import com.yonge.toolset.utils.string.ValueUtil;
->>>>>>> Stashed changes
-import org.apache.commons.lang3.StringUtils;
-import org.redisson.api.RMap;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -60,28 +15,67 @@ import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.dto.TeacherDto;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
 import com.yonge.cooleshow.biz.dal.enums.TeacherTypeEnum;
+import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumRefMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindHistoryMapper;
+import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindRecordMapper;
+import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.HotTeacherVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetUploadCountVo;
 import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.biz.dal.wordfilter.WordFilter;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.enums.ESettlementFrom;
+import com.yonge.cooleshow.common.enums.ETenantUnBindAuditStatus;
 import com.yonge.cooleshow.common.enums.UserFirstTimeTypeEnum;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import com.yonge.toolset.utils.string.ValueUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RMap;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.TEACHER_TEMP_LIVE_ROOM;
 
 @Service
 public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> implements TeacherService {
@@ -155,6 +149,9 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     @Autowired
     private SmsCodeService smsCodeService;
 
+    @Autowired
+    private RealnameAuthenticationPlugin realnameAuthenticationPlugin;
+
 
     @Override
     public TeacherVo detail(Long userId) {
@@ -508,7 +505,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 TeacherWrapper.UpdateTenant updateTenant = new TeacherWrapper.UpdateTenant();
                 updateTenant.setTeacherId(teacher.getUserId());
                 updateTenant.setTenantId(teacherSubmitReq.getTenantId());
-                updateTenant(updateTenant);
+                updateTenant(updateTenant, teacherSubmitReq.getUpdateBy());
             }
 
             teacher.setUpdateTime(new Date());
@@ -960,7 +957,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
 //    @Transactional(rollbackFor = Exception.class)
     @Override
-    public void updateTenant(TeacherWrapper.UpdateTenant updateTenant) {
+    public void updateTenant(TeacherWrapper.UpdateTenant updateTenant,Long userId) {
         Teacher teacher = this.getById(updateTenant.getTeacherId());
         if (teacher.getTenantId().equals(updateTenant.getTenantId())) {
             return;
@@ -1013,6 +1010,8 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             TenantUnbindRecord tenantUnbindRecord = first.get();
             tenantUnbindRecord.setStatus(ETenantUnBindAuditStatus.CLOSE);
             tenantUnbindRecord.setReason("机构发生变更,关闭申请");
+            tenantUnbindRecord.setVerifyUserId(userId);
+            tenantUnbindRecord.setInterveneTime(new Date());
             tenantUnbindRecordMapper.updateById(tenantUnbindRecord);
 
             TenantUnbindHistory history = JSON.parseObject(JSON.toJSONString(tenantUnbindRecord),

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

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
 import com.yonge.cooleshow.biz.dal.entity.TenantAlbumPurchase;
+import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.entity.UserTenantAlbumRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
@@ -304,6 +305,68 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         this.updateById(one);
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void batchSendCancel(TenantInfo tenantInfo, String ids) {
+        List<Long> idList = Arrays.stream(ids.split(",")).map(Long::valueOf).distinct().collect(Collectors.toList());
+        Collection<TenantActivationCode> tenantActivationCodes = this.listByIds(idList);
+        for (TenantActivationCode tenantActivationCode : tenantActivationCodes) {
+            if (Boolean.TRUE.equals(tenantActivationCode.getActivationStatus())) {
+                throw new BizException("激活码已经被使用");
+            }
+        }
+        tenantActivationCodes.removeIf(next -> Boolean.TRUE.equals(next.getActivationStatus()));
+        if (tenantActivationCodes.isEmpty()) {
+            throw new BizException("无可撤回的激活码");
+        }
+
+        this.lambdaUpdate()
+                .set(TenantActivationCode::getSendStatus, EActivationCode.WAIT)
+                .set(TenantActivationCode::getActivationPhone, "")
+                .in(TenantActivationCode::getId, idList)
+                .eq(TenantActivationCode::getActivationStatus, false)
+                .eq(TenantActivationCode::getSendStatus, EActivationCode.SEND)
+                .update();
+
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void batchResend(TenantInfo tenantInfo, Long tenantAlbumPurchaseId, List<String> activationCodeList,
+                            List<Long> studentIdList) {
+
+        if (CollectionUtils.isEmpty(studentIdList)) {
+            throw new BizException("学生列表不能为空");
+        }
+
+        QueryWrapper<TenantActivationCode> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda()
+                .eq(TenantActivationCode::getTenantId, tenantInfo.getId())
+                .eq(TenantActivationCode::getTenantAlbumPurchaseId, tenantAlbumPurchaseId)
+                .eq(TenantActivationCode::getActivationStatus, false)
+                .in(CollectionUtils.isNotEmpty(activationCodeList), TenantActivationCode::getActivationCode,
+                        activationCodeList);
+        List<TenantActivationCode> activationCodes = this.list(queryWrapper);
+        if (activationCodes.isEmpty()) {
+            throw new BizException("无可重发的激活码");
+        }
+        if (activationCodes.size() < studentIdList.size()) {
+            throw new BizException("可发激活码的数量小于学生的数量");
+        }
+
+        List<SysUser> sysUsers = sysUserMapper.selectBatchIds(studentIdList);
+        Map<Long, String> mapPhoneById = sysUsers.stream().collect(Collectors.toMap(SysUser::getId, SysUser::getPhone));
+
+        List<TenantActivationCode> updates = new ArrayList<>();
+        for (int i = 0; i < studentIdList.size(); i++) {
+            TenantActivationCode tenantActivationCode = activationCodes.get(i);
+            tenantActivationCode.setSendStatus(EActivationCode.SEND);
+            tenantActivationCode.setActivationPhone(mapPhoneById.getOrDefault(studentIdList.get(i), ""));
+            updates.add(tenantActivationCode);
+        }
+        this.updateBatchById(updates);
+    }
+
 
     /**
      * 添加用户机构专辑激活记录

+ 17 - 0
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java

@@ -150,6 +150,15 @@ public class TenantActivationCodeController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "激活码批量重发", notes = "机构激活码- 传入 TenantActivationCodeVo.TenantActivationCodeSend")
+    @PostMapping("/batchResend")
+    public HttpResponseResult<Boolean> batchResend(@Validated @RequestBody TenantActivationCodeVo.TenantActivationCodeSend send) {
+        TenantInfo tenantInfo = getTenantInfo();
+        tenantActivationCodeService.batchResend(tenantInfo, send.getTenantAlbumPurchaseId(),
+                send.getActivationCodeList(), send.getStudentIdList());
+        return succeed();
+    }
+
     @ApiOperation(value = "激活码发放取消", notes = "传入 激活码的ID")
     @PostMapping("/sendCancel")
     public HttpResponseResult<Boolean> sendCancel(@RequestParam("id") Long id) {
@@ -171,6 +180,14 @@ public class TenantActivationCodeController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "批量激活码发放取消", notes = "传入 激活码的ID")
+    @PostMapping("/batchSendCancel")
+    public HttpResponseResult<Boolean> batchSendCancel(@RequestParam("ids") String ids) {
+        TenantInfo tenantInfo = getTenantInfo();
+        tenantActivationCodeService.batchSendCancel(tenantInfo, ids);
+        return succeed();
+    }
+
     @GetMapping("/exportActiveCode")
     @ApiOperation(value = "导出模板")
     public HttpResponseResult<TenantActivationCodeWrapper.ExportFile> exportActiveCode(HttpServletResponse response, String orderNo) {

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

@@ -230,7 +230,7 @@ public class TenantInfoController extends BaseController {
                 newSysUser.setUpdateTime(LocalDateTime.now());
                 if (StringUtils.isBlank(newSysUser.getAvatar())) {
                     // 使用默认用户头像
-                    newSysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD));
+                    newSysUser.setAvatar(sysConfigService.findConfigValue(SysConfigConstant.TEACHER_AVATAR));
                 }
                 // 锁定状态
                 newSysUser.setLockFlag(0);

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

@@ -71,9 +71,6 @@ public class OpenStudentController extends BaseController {
     @Autowired
     private ImGroupMemberService imGroupMemberService;
 
-    @Autowired
-    private SysConfigService sysConfigService;
-
     @PostMapping("/save")
     @ApiOperation(value = "新增/修改", notes = "传入Student,换绑时按照返回错误码5004判断,是否需要换绑,updateTenant=true表示换绑")
     public HttpResponseResult<Boolean> save(@Validated @RequestBody StudentVo.Student student) {
@@ -96,7 +93,7 @@ public class OpenStudentController extends BaseController {
 
         if (studentId == null) {
             SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
-            if (sysUser != null) {
+            if (sysUser != null && sysUser.getUserType().contains(ClientEnum.STUDENT.getCode())) {
                 studentId = sysUser.getId();
             }
         }