Explorar o código

Merge branch 'develop' of http://git.dayaedu.com/yonge/cooleshow

zouxuan hai 1 ano
pai
achega
e06b66bc91

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SysMusicCompareRecordQueryInfo.java

@@ -54,6 +54,9 @@ public class SysMusicCompareRecordQueryInfo {
 
         @ApiModelProperty(name = "排序方式")
         private String sortType = "DESC";
+
+        @ApiModelProperty(name = "客户端")
+        private String clientId = "student";
     }
 
     @Data

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

@@ -14,11 +14,14 @@ import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.service.CourseCoursewareService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
 import com.yonge.cooleshow.biz.dal.vo.CourseCoursewareVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import org.apache.commons.collections.CollectionUtils;
@@ -57,6 +60,9 @@ public class CourseCoursewareServiceImpl extends ServiceImpl<CourseCoursewareDao
     @Autowired
     private TeacherDao teacherDao;
 
+    @Autowired
+    private TenantAlbumMusicService tenantAlbumMusicService;
+
 	@Override
     public CourseCoursewareVo detail(Long id) {
         return baseMapper.detail(id);
@@ -170,6 +176,20 @@ public class CourseCoursewareServiceImpl extends ServiceImpl<CourseCoursewareDao
             }
         }
 
+        // 查询老师所在机构存在机构曲目
+        if (query.getClientType().equals(ClientEnum.TEACHER)) {
+            TeacherVo detail = teacherDao.detail(query.getUserId());
+            if (detail != null) {
+                List<Long> list = tenantAlbumMusicService.getMusicIdsByTenantIds(detail.getTenantId());
+
+                for (CourseCoursewareVo record : records) {
+                    if (list.contains(record.getMusicSheetId())) {
+                        record.setStatus(YesOrNoEnum.YES);
+                    }
+                }
+            }
+        }
+
         courseCoursewareVoIPage.setRecords(records);
         return courseCoursewareVoIPage;
     }

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

@@ -460,6 +460,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     @Override
     public TenantAlbumWrapper.TenantAlbum detailAlbum(String albumId) {
         Long tenantAlbumId;
+        Integer size = 0;
         TenantAlbumWrapper.TenantAlbum album = new TenantAlbumWrapper.TenantAlbum();
         if (StringUtils.isEmpty(albumId)){
             //如果没传专辑id  则查询对应机构的专辑详情
@@ -510,7 +511,10 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         List<TenantAlbumMusic> tenantAlbumMusiclist = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getTenantAlbumId, tenantAlbumId)
                 .eq(TenantAlbumMusic::getDelFlag,false).list();
         List<Long> MusicSheetIds = tenantAlbumMusiclist.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
-        int size = MusicSheetIds.size();
+        if (CollectionUtils.isNotEmpty(MusicSheetIds)){
+            size = musicSheetService.lambdaQuery().in(MusicSheet::getId, MusicSheetIds).eq(MusicSheet::getState, true)
+                    .eq(MusicSheet::getDelFlag, false).count();
+        }
 
         //获取合奏曲目数量
         List<TenantAlbumMusic> ensembleLits = tenantAlbumMusicService.lambdaQuery().eq(TenantAlbumMusic::getSubjectType, "ENSEMBLE")
@@ -586,6 +590,13 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
 
         TenantAlbumWrapper.TenantAlbum album = new TenantAlbumWrapper.TenantAlbum();
 
+        //获取对应机构专辑状态
+        TenantAlbum one = tenantAlbumService.lambdaQuery().eq(TenantAlbum::getId, tenantAlbumId).last("limit 1").one();
+        if (!ObjectUtil.isEmpty(one)){
+            album.setStatus(one.getStatus());
+        }
+
+
         //查询对应专辑的详情
         List<TenantAlbum> list = tenantAlbumService.lambdaQuery().eq(TenantAlbum::getStatus, true).eq(TenantAlbum::getId, tenantAlbumId).list();
         if (CollectionUtils.isEmpty(list)){

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

@@ -448,8 +448,9 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         // 校验数据的完整性
         List<String> errMsg = new ArrayList<>();
         Map<String, Integer> phoneMap = new HashMap<>();
+        int rowIndex = 0;
         for (ExcelDataReaderProperty<StudentWrapper.StudentImport> next : dataList) {
-            Integer rowIndex = next.getRowIndex();
+            rowIndex++;
             StudentWrapper.StudentImport student = next.getClazz();
 
             int msgRowNo = rowIndex + 1;

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

@@ -1,12 +1,14 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alipay.api.domain.NextUrl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
+import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
@@ -14,17 +16,20 @@ import com.yonge.cooleshow.biz.dal.entity.TenantAlbumPurchase;
 import com.yonge.cooleshow.biz.dal.entity.UserTenantAlbumRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.EImSendStatus;
 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.mapper.UserTenantAlbumRecordMapper;
 import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumService;
+import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.enums.EActivationCode;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
@@ -34,14 +39,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.function.Function;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 机构激活码
@@ -66,6 +68,8 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
     @Autowired
     private TenantAlbumService tenantAlbumService;
 
+    private static final String PHONE_REG = "^1\\d{10}$";
+
     /**
      * 查询详情
      *
@@ -323,84 +327,94 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         }
         dataList.sort(Comparator.comparingInt(ExcelDataReaderProperty::getRowIndex));
 
-        List<String> errMsg = new ArrayList<>();
+        List<TenantActivationCodeWrapper.ImportTemplate> importTemplates = dataList.stream().map(ExcelDataReaderProperty::getClazz).collect(Collectors.toList());
+        List<String> codeList = importTemplates.stream().map(TenantActivationCodeWrapper.ImportTemplate::getCode).
+                filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+        if(codeList.isEmpty()){
+            throw new BizException("未指定激活码");
+        }
+
+        List<String> phoneList = importTemplates.stream().map(TenantActivationCodeWrapper.ImportTemplate::getPhone)
+                        .filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+        if(phoneList.isEmpty()){
+            throw new BizException("未指定手机号");
+        }
+
+        List<TenantActivationCode> activationCodes = this.lambdaQuery()
+                .eq(TenantActivationCode::getTenantId, tenantId)
+                .eq(TenantActivationCode::getTenantAlbumPurchaseId, tenantAlbumPurchaseId)
+                .in(TenantActivationCode::getActivationCode, codeList).list();
+        Map<String, TenantActivationCode> mapByCode = activationCodes.stream().collect(Collectors.toMap(TenantActivationCode::getActivationCode, Function.identity()));
+
+        StudentSearch studentSearch = new StudentSearch();
+        studentSearch.setRows(9999);
+        studentSearch.setPage(1);
+        studentSearch.setPhoneList(phoneList);
+        List<StudentVo> studentVos = studentDao.selectPage(PageUtil.getPage(studentSearch), studentSearch);
+        Map<String, StudentVo> mapStudentByPhone = studentVos.stream().collect(Collectors.toMap(StudentVo::getPhone, Function.identity()));
+
+        Map<Integer,List<String>> errMsgMap = new LinkedHashMap<>();
         Map<String, Integer> codeRowMap = new HashMap<>();
-        Map<String, String> codePhoneMap = new HashMap<>();
 
         String errTemplate = "第%s行%s";
-        // 校验数据格式是否错误
-        int rowIndex = 0;
-        for (ExcelDataReaderProperty<TenantActivationCodeWrapper.ImportTemplate> next : dataList) {
+        int rowIndex = 1;
+        // 校验数据格式是否错误 第二行开始取数据
+        for (TenantActivationCodeWrapper.ImportTemplate template : importTemplates) {
             rowIndex++;
-            TenantActivationCodeWrapper.ImportTemplate code = next.getClazz();
 
-            String acCode = code.getCode();
+            String acCode = template.getCode();
             if (StringUtils.isEmpty(acCode)) {
                 continue;
             }
             int msgRowNo = rowIndex;
-            code.checkIsIllegal().forEach(err -> errMsg.add(String.format(errTemplate, msgRowNo, err)));
-            if (codeRowMap.containsKey(code.getCode())) {
-                errMsg.add(String.format(errTemplate, msgRowNo, "激活码重复"));
-            }
-            codeRowMap.put(acCode, msgRowNo);
-            if (StringUtils.isNotEmpty(code.getPhone())) {
-                codePhoneMap.put(acCode.trim(), code.getPhone().trim());
+            List<String> errList = errMsgMap.getOrDefault(msgRowNo, new ArrayList<>());
+            String code = template.getCode();
+            if (codeRowMap.containsKey(code)) {
+                errList.add(String.format(errTemplate, msgRowNo, "激活码重复"));
+            } else {
+                codeRowMap.put(acCode, msgRowNo);
             }
 
-            if (errMsg.size() > 100) {
-                break;
+            if (!mapByCode.containsKey(code)) {
+                errList.add(String.format(errTemplate, msgRowNo, "激活码不存在"));
+            } else {
+                TenantActivationCode tenantActivationCode = mapByCode.get(code);
+                if (tenantActivationCode.getActivationStatus() || EActivationCode.SEND.equals(tenantActivationCode.getSendStatus())) {
+                    errList.add(String.format(errTemplate, msgRowNo, "激活码已被发放/激活"));
+                }
             }
-        }
-
-        if (codePhoneMap.isEmpty()) {
-            throw new BizException("请指定手机号码激活");
-        }
-
-        if (!errMsg.isEmpty()) {
-            throw new BizException(String.join(",", errMsg));
-        }
-        // 校验激活码是否被使用
-        List<List<String>> codePartition = Lists.partition(new ArrayList<>(codeRowMap.keySet()), 50);
-
-        List<TenantActivationCode> tenantActivationCodes = new ArrayList<>();
-        for (List<String> codes : codePartition) {
-            List<TenantActivationCode> activationCodes = this.lambdaQuery()
-                    .eq(TenantActivationCode::getTenantId, tenantId)
-                    .eq(TenantActivationCode::getTenantAlbumPurchaseId, tenantAlbumPurchaseId)
-                    .in(TenantActivationCode::getActivationCode, codes).list();
-
-            // 存在无效码或者已经使用过的码
-            if (codes.size() != activationCodes.size() ||
-                    activationCodes.stream().anyMatch(TenantActivationCode::getActivationStatus)) {
-                Map<String, Boolean> codeStatusMap = activationCodes.stream()
-                        .collect(Collectors.toMap(TenantActivationCode::getActivationCode,
-                                TenantActivationCode::getActivationStatus));
-                for (String code : codes) {
-                    if (!codeStatusMap.containsKey(code)) {
-                        errMsg.add(String.format(errTemplate, codeRowMap.get(code), "激活码无效"));
-                    } else if (Boolean.TRUE.equals(codeStatusMap.get(code))) {
-                        errMsg.add(String.format(errTemplate, codeRowMap.get(code), "激活码已经激活"));
-                    }
+            String phone = template.getPhone();
+            if (StringUtils.isNotEmpty(phone)) {
+                if (!Pattern.matches(PHONE_REG, phone.trim()) ||
+                        (mapStudentByPhone.containsKey(phone) && !mapStudentByPhone.get(phone).getTenantId().equals(tenantId))) {
+                    errList.add(String.format(errTemplate, msgRowNo, "手机号错误或已注册成为其他机构学员"));
                 }
             }
 
-            List<TenantActivationCode> updateDataList = activationCodes.stream().map(next -> {
-                TenantActivationCode tenantActivationCode = new TenantActivationCode();
-                tenantActivationCode.setId(next.getId());
-                tenantActivationCode.setActivationPhone(codePhoneMap.get(next.getActivationCode()));
-                tenantActivationCode.setSendStatus(EActivationCode.SEND);
-                return tenantActivationCode;
-            }).collect(Collectors.toList());
-
-            tenantActivationCodes.addAll(updateDataList);
+            errMsgMap.put(msgRowNo, errList);
         }
+
+        List<String> errMsg = errMsgMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
         if (!errMsg.isEmpty()) {
+            String errLines = errMsgMap.entrySet().stream().filter(next -> CollectionUtils.isNotEmpty(next.getValue()))
+                    .map(next -> String.valueOf(next.getKey())).collect(Collectors.joining("、"));
+            errMsg.add(0, "第" + errLines + "行存在错误");
             throw new BizException(String.join(",", errMsg));
         }
-        if (!tenantActivationCodes.isEmpty()) {
-            this.updateBatchById(tenantActivationCodes, 50);
+        List<TenantActivationCode> tenantActivationCodes = importTemplates.stream()
+                .filter(next -> StringUtils.isNotEmpty(next.getCode()) && StringUtils.isNotBlank(next.getPhone()))
+                .map(next -> {
+                    TenantActivationCode record = mapByCode.get(next.getCode());
+                    TenantActivationCode tenantActivationCode = new TenantActivationCode();
+                    tenantActivationCode.setId(record.getId());
+                    tenantActivationCode.setActivationPhone(next.getPhone());
+                    tenantActivationCode.setSendStatus(EActivationCode.SEND);
+                    return tenantActivationCode;
+                }).collect(Collectors.toList());
+        if (tenantActivationCodes.isEmpty()) {
+            throw new BizException("没有合法的导入数据");
         }
+        this.updateBatchById(tenantActivationCodes, 50);
     }
 
     private void addUserTenantAlbumRecord(Long studentId, TenantAlbumPurchase purchase,

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

@@ -165,9 +165,9 @@ public class TenantActivationCodeWrapper {
             if (StringUtils.isEmpty(code)) {
                 errMsg.add("激活码不能为空");
             }
-            if (StringUtils.isNotEmpty(phone) && !Pattern.matches(PHONE_REG, phone.trim())) {
-                errMsg.add("手机号格式错误");
-            }
+//            if (StringUtils.isNotEmpty(phone) && !Pattern.matches(PHONE_REG, phone.trim())) {
+//                errMsg.add("手机号格式错误");
+//            }
             return errMsg;
         }
 

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -365,6 +365,9 @@
 			<if test="tenantId != null">
 				AND smcr.tenant_id_ = #{tenantId}
 			</if>
+			<if test="clientId != null and clientId!= ''">
+				AND smcr.client_id_ = #{clientId}
+			</if>
 		</where>
 		group by smcr.user_id_, DATE_FORMAT(create_time_, '%Y-%m-%d')) mprs ON mprs.user_id_ = st.user_id_
 		left join sys_user su ON st.user_id_ = su.id_
@@ -385,6 +388,9 @@
 		left join sys_user su ON st.user_id_ = su.id_
 		LEFT JOIN sys_music_compare_record smcr ON smcr.user_id_ = st.user_id_
 		<where>
+			<if test="clientId != null and clientId!= ''">
+				AND smcr.client_id_ = #{clientId}
+			</if>
 			<if test="tenantId != null">
 				AND smcr.tenant_id_ = #{tenantId}
 			</if>

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

@@ -195,7 +195,7 @@ public class TenantActivationCodeController extends BaseController {
         }
 
         List<TenantActivationCodeWrapper.ExportTemplate> templates = JSONArray.parseArray(JSON.toJSONString(rows), TenantActivationCodeWrapper.ExportTemplate.class);
-
+        templates.forEach(next->next.setActivationPhone(""));
 
         TenantActivationCodeWrapper.ExportFile exportFile = generateExportExcelFile(templates, TenantActivationCodeWrapper.ExportTemplate.class, "激活码导出", "激活码");
         return succeed(exportFile);