Browse Source

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into zouxuan_saas_2022_04_15

zouxuan 3 năm trước cách đây
mục cha
commit
e5750692ee
18 tập tin đã thay đổi với 662 bổ sung71 xóa
  1. 15 0
      audio-analysis/src/main/java/com/yonge/audio/AudioAnalysisServerApplication.java
  2. 8 0
      audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java
  3. 64 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentImportDto.java
  4. 29 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeDto.java
  5. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/FivePlusGradeEnum.java
  6. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SixPlusGradeEnum.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/TemplateTypeEnum.java
  8. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java
  9. 420 35
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  10. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  11. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java
  12. 28 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java
  13. 3 3
      mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  14. 6 0
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml
  15. 18 5
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreAccompanimentController.java
  16. 16 0
      mec-util/src/main/java/com/ym/mec/util/validator/CommonValidator.java
  17. 8 2
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  18. BIN
      mec-web/src/main/resources/excelTemplate/外部学生入团导入模板.xls

+ 15 - 0
audio-analysis/src/main/java/com/yonge/audio/AudioAnalysisServerApplication.java

@@ -1,17 +1,23 @@
 package com.yonge.audio;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.cloud.client.loadbalancer.LoadBalanced;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
 import org.springframework.web.client.RestTemplate;
 
 import com.spring4all.swagger.EnableSwagger2Doc;
+import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
 
 @SpringBootApplication
 @EnableDiscoveryClient
@@ -31,4 +37,13 @@ public class AudioAnalysisServerApplication {
 	public RestTemplate restTemplate() {
 		return new RestTemplate();
 	}
+	
+	@Bean
+    public HttpMessageConverters fastJsonHttpMessageConverters(){
+		LocalFastJsonHttpMessageConverter converter = new LocalFastJsonHttpMessageConverter();
+        List<MediaType> fastMediaTypes =  new ArrayList<MediaType>();
+        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
+        converter.setSupportedMediaTypes(fastMediaTypes);
+        return new HttpMessageConverters(converter);
+    }
 }

+ 8 - 0
audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java

@@ -25,6 +25,8 @@ import org.springframework.stereotype.Component;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONPath;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.enums.DeviceTypeEnum;
 import com.ym.mec.biz.dal.enums.FeatureType;
@@ -57,6 +59,9 @@ public class AudioCompareHandler implements MessageHandler {
 	
 	@Autowired
 	private SysMusicCompareRecordService sysMusicCompareRecordService;
+	
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
     @Autowired
     private StoragePluginContext storagePluginContext;
@@ -149,6 +154,9 @@ public class AudioCompareHandler implements MessageHandler {
 				sysMusicCompareRecord.setSpeed(musicXmlBasicInfo.getSpeed());
 				sysMusicCompareRecord.setPartIndex(musicXmlBasicInfo.getPartIndex());
 				
+				SysUser sysUser = sysUserFeignService.queryUserById(sysMusicCompareRecord.getUserId());
+				sysMusicCompareRecord.setTenantId(sysUser.getTenantId());
+				
 				MusicXmlNote musicXmlNote = musicXmlBasicInfo.getMusicXmlInfos().stream().max(Comparator.comparing(MusicXmlNote::getTimeStamp)).get();
 				sysMusicCompareRecord.setSourceTime((float) ((musicXmlNote.getTimeStamp()+musicXmlNote.getDuration())/1000));
 				sysMusicCompareRecordService.insert(sysMusicCompareRecord);

+ 64 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentImportDto.java

@@ -0,0 +1,64 @@
+package com.ym.mec.biz.dal.dto;
+
+public class StudentImportDto {
+
+	private String name;
+	
+	private String mobileNo;
+	
+	private String sex;
+	
+	private String subjectName;
+	
+	private String gradeName;
+	
+	private Integer userId;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getMobileNo() {
+		return mobileNo;
+	}
+
+	public void setMobileNo(String mobileNo) {
+		this.mobileNo = mobileNo;
+	}
+
+	public String getSex() {
+		return sex;
+	}
+
+	public void setSex(String sex) {
+		this.sex = sex;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public String getGradeName() {
+		return gradeName;
+	}
+
+	public void setGradeName(String gradeName) {
+		this.gradeName = gradeName;
+	}
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+}

+ 29 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherServeDto.java

@@ -24,8 +24,12 @@ public class TeacherServeDto {
 
     private String organName;
 
+    @ApiModelProperty(value = "作业次数(节)", required = false)
     private int homeworkNum;
 
+    @ApiModelProperty(value = "作业次数(人)", required = false)
+    private int homeworkStuNum;
+
     private int exerciseNum;
 
     private int unDone;
@@ -38,10 +42,10 @@ public class TeacherServeDto {
     private JobNatureEnum jobNature;
 
     /** 预期训练次数 */
-    private Integer expectExercisesNum;
+    private int expectExercisesNum;
 
     /** 实际训练次数 */
-    private Integer actualExercisesNum;
+    private int actualExercisesNum;
 
     /** 提交训练次数 */
     private Integer exercisesReplyNum;
@@ -55,9 +59,28 @@ public class TeacherServeDto {
     /** 点评率 */
     private String exercisesMessageRate;
 
+    /** 及时评价率 */
+    private String exercisesMessageTimelyRate;
+
     @ApiModelProperty(value = "提交率")
     private String submitRate;
 
+    public String getExercisesMessageTimelyRate() {
+        return exercisesMessageTimelyRate;
+    }
+
+    public void setExercisesMessageTimelyRate(String exercisesMessageTimelyRate) {
+        this.exercisesMessageTimelyRate = exercisesMessageTimelyRate;
+    }
+
+    public int getHomeworkStuNum() {
+        return homeworkStuNum;
+    }
+
+    public void setHomeworkStuNum(int homeworkStuNum) {
+        this.homeworkStuNum = homeworkStuNum;
+    }
+
     public String getExercisesMessageRate() {
         return exercisesMessageRate;
     }
@@ -74,19 +97,19 @@ public class TeacherServeDto {
         this.submitRate = submitRate;
     }
 
-    public Integer getExpectExercisesNum() {
+    public int getExpectExercisesNum() {
         return expectExercisesNum;
     }
 
-    public void setExpectExercisesNum(Integer expectExercisesNum) {
+    public void setExpectExercisesNum(int expectExercisesNum) {
         this.expectExercisesNum = expectExercisesNum;
     }
 
-    public Integer getActualExercisesNum() {
+    public int getActualExercisesNum() {
         return actualExercisesNum;
     }
 
-    public void setActualExercisesNum(Integer actualExercisesNum) {
+    public void setActualExercisesNum(int actualExercisesNum) {
         this.actualExercisesNum = actualExercisesNum;
     }
 

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/FivePlusGradeEnum.java

@@ -33,5 +33,14 @@ public enum FivePlusGradeEnum implements BaseEnum<Integer, FivePlusGradeEnum> {
 	public String getDesc() {
 		return desc;
 	}
+	
+	public static FivePlusGradeEnum get(String desc) {
+		for (FivePlusGradeEnum vpg : FivePlusGradeEnum.values()) {
+			if (vpg.getDesc().equals(desc)) {
+				return vpg;
+			}
+		}
+		return null;
+	}
 
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SixPlusGradeEnum.java

@@ -33,5 +33,14 @@ public enum SixPlusGradeEnum implements BaseEnum<Integer, SixPlusGradeEnum> {
 	public String getDesc() {
 		return desc;
 	}
+	
+	public static SixPlusGradeEnum get(String desc) {
+		for (SixPlusGradeEnum vpg : SixPlusGradeEnum.values()) {
+			if (vpg.getDesc().equals(desc)) {
+				return vpg;
+			}
+		}
+		return null;
+	}
 
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/TemplateTypeEnum.java

@@ -8,7 +8,7 @@ public enum TemplateTypeEnum implements BaseEnum<String, TemplateTypeEnum> {
     FINANCIAL_EXPENDITURE("FINANCIAL_EXPENDITURE","财务支出导入模板"),
     REDEMPTIONCODE("REDEMPTION_CODE", "兑换码分配模板表"),
     OA_QUIT_MUSIC_GROUP("OA_QUIT_MUSIC_GROUP", "乐团退费模板"),
-    EXTERNAL_STUDENT_IMPORT_MUSIC_GROUP("EXTERNAL_STUDENT_IMPORT_MUSIC_GROUP", "外部学生导入乐团模板");
+    EXTERNAL_STUDENT_IMPORT_MUSIC_GROUP("EXTERNAL_STUDENT_IMPORT_MUSIC_GROUP", "外部学生入团导入模板");
 
     private String code;
 

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java

@@ -19,6 +19,10 @@ public class SysExamSongQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "曲库分类",required = true)
     private String categoriesId;
+    
+    private String filterCategoriesIds;
+    
+    private String categoriesIds;
 
     @ApiModelProperty(value = "是否收费",required = true)
     private Integer rankType;
@@ -142,4 +146,20 @@ public class SysExamSongQueryInfo extends QueryInfo {
     public void setType(String type) {
         this.type = type;
     }
+
+	public String getFilterCategoriesIds() {
+		return filterCategoriesIds;
+	}
+
+	public void setFilterCategoriesIds(String filterCategoriesIds) {
+		this.filterCategoriesIds = filterCategoriesIds;
+	}
+
+	public String getCategoriesIds() {
+		return categoriesIds;
+	}
+
+	public void setCategoriesIds(String categoriesIds) {
+		this.categoriesIds = categoriesIds;
+	}
 }

+ 420 - 35
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -1,22 +1,196 @@
 package com.ym.mec.biz.service.impl;
 
+import static com.ym.mec.biz.dal.entity.ApprovalStatus.PROCESSING;
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.ING;
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.ACCESSORIES;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.MAINTENANCE;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.MUSICAL;
+import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.TEACHING;
+import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
+import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.ORGAN_MANAGER;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.dao.ChargeTypeDao;
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
+import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
+import com.ym.mec.biz.dal.dao.CooperationOrganDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
+import com.ym.mec.biz.dal.dao.GoodsDao;
+import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderStudentDetailDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentEntitiesDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentStudentCourseDetailDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPurchaseListDao;
+import com.ym.mec.biz.dal.dao.MusicGroupQuitDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSchoolTermCourseDetailDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSchoolTermStudentCourseDetailDao;
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectGoodsGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectPlanDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.SchoolDao;
+import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
+import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dao.StudentInstrumentDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
+import com.ym.mec.biz.dal.dao.StudentPreRegistrationDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.StudentVisitDao;
+import com.ym.mec.biz.dal.dao.SubjectChangeDao;
+import com.ym.mec.biz.dal.dao.SubjectDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountLogDao;
+import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.CloseMusicGroupDto;
+import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
+import com.ym.mec.biz.dal.dto.HighClassGroupDto;
+import com.ym.mec.biz.dal.dto.MusicCardDto;
+import com.ym.mec.biz.dal.dto.MusicGroupApplyGoodsDto;
+import com.ym.mec.biz.dal.dto.MusicGroupBasicDto;
+import com.ym.mec.biz.dal.dto.RegisterPayDto;
+import com.ym.mec.biz.dal.dto.SporadicPayDto;
+import com.ym.mec.biz.dal.dto.StudentApplyInstrumentDto;
+import com.ym.mec.biz.dal.dto.StudentImportDto;
+import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
+import com.ym.mec.biz.dal.dto.SubjectRegisterDto;
+import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
+import com.ym.mec.biz.dal.entity.ChargeType;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.CouponPayParam;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.FinancialExpenditure;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderStudentDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupPurchaseList;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.entity.MusicGroupReturnFeeDto;
+import com.ym.mec.biz.dal.entity.MusicGroupSchoolTermCourseDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
+import com.ym.mec.biz.dal.entity.MusicMemberDto;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.School;
+import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentInstrument;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentPreRegistration;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.entity.SubjectChange;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.entity.SysUserCashAccountLog;
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.CouponDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
+import com.ym.mec.biz.dal.enums.GoodsType;
+import com.ym.mec.biz.dal.enums.GradeTypeEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.ReturnFeeEnum;
+import com.ym.mec.biz.dal.enums.SixPlusGradeEnum;
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
+import com.ym.mec.biz.dal.enums.TeachTypeEnum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.dal.page.MusicMemberQueryInfo;
 import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.event.source.SendSeoMessageSource;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.ClassGroupStudentMapperService;
+import com.ym.mec.biz.service.ContractService;
+import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
+import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.biz.service.ImGroupMemberService;
+import com.ym.mec.biz.service.ImGroupService;
+import com.ym.mec.biz.service.ImUserFriendService;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
+import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.StudentService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysCouponCodeService;
+import com.ym.mec.biz.service.SysEmployeePositionService;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysTenantConfigService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -32,30 +206,7 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.json.JsonUtil;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.ym.mec.biz.dal.entity.ApprovalStatus.PROCESSING;
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.ING;
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
-import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.*;
-import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
-import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.ORGAN_MANAGER;
+import com.ym.mec.util.validator.CommonValidator;
 
 @Service
 public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> implements MusicGroupService {
@@ -83,6 +234,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private MusicGroupSubjectPlanDao musicGroupSubjectPlanDao;
     @Autowired
+    private MusicGroupSubjectPlanService musicGroupSubjectPlanService;
+    @Autowired
     private MusicGroupBuildLogDao musicGroupBuildLogDao;
     @Autowired
     private MusicGroupPurchaseListDao musicGroupPurchaseListDao;
@@ -189,6 +342,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     private SendSeoMessageSource sendSeoMessageSource;
     @Autowired
     private SysEmployeePositionService employeePositionService;
+    @Autowired
+    private SysUserCashAccountDao sysUserCashAccountDao;
+    @Autowired
+    private StudentDao studentDao;
 
     private SimpleDateFormat sdf_ymd = new SimpleDateFormat("yyyy-MM-dd");
 
@@ -204,6 +361,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
 	public boolean importStudentToMusicGroup(String musicGroupId, Map<String, List<Map<String, Object>>> excelData) {
     	
     	MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
@@ -216,10 +374,240 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     		throw new BizException("只有[缴费中]状态的乐团才能导入数据");
     	}
     	
-    	//查询缴费金额是否是0
+    	Integer tenantId = musicGroup.getTenantId();
+    	
+    	List<StudentImportDto> studentBasicList = new ArrayList<StudentImportDto>();
+    	List<Map<String, Object>> sheet = null;
+    	StudentImportDto dto = null;
+    	for (String sheetName : excelData.keySet()) {
+    		sheet = excelData.get(sheetName);
+    		for(Map<String,Object> row : sheet){
+        		dto = new StudentImportDto();
+        		if(row.get("学生姓名") == null || StringUtils.isBlank(row.get("学生姓名").toString())){
+        			throw new BizException("学生姓名不能为空");
+        		}
+        		dto.setName(row.get("学生姓名").toString());
+        		if(!CommonValidator.isUserName(dto.getName())){
+        			throw new BizException("学生姓名[{}]填写错误", dto.getName());
+        		}
+        		
+        		if(row.get("性别") == null || StringUtils.isBlank(row.get("性别").toString())){
+        			throw new BizException("性别不能为空");
+        		}
+    			dto.setSex(row.get("性别").toString());
+    			
+        		if(row.get("手机号码") == null || StringUtils.isBlank(row.get("手机号码").toString())){
+        			throw new BizException("手机号码不能为空");
+        		}
+    			dto.setMobileNo(row.get("手机号码").toString());
+        		if(!CommonValidator.isMobileNo(dto.getMobileNo())){
+        			throw new BizException("手机号码[{}]填写错误", dto.getMobileNo());
+        		}
+        		
+        		if(row.get("学习声部") == null || StringUtils.isBlank(row.get("学习声部").toString())){
+        			throw new BizException("学习声部不能为空");
+        		}
+    			dto.setSubjectName(row.get("学习声部").toString());
+    			
+        		if(row.get("所在年级") == null || StringUtils.isBlank(row.get("所在年级").toString())){
+        			throw new BizException("所在年级不能为空");
+        		}
+    			dto.setGradeName(row.get("所在年级").toString());
+    			
+    			studentBasicList.add(dto);
+    		}
+    	}
+    	
+    	Date nowDate = new Date();
+    	
+    	//查询导入的声部是否正确
+    	List<String> subjectNameList = studentBasicList.stream().distinct().map(t->t.getSubjectName()).collect(Collectors.toList());
+    	
+    	List<MusicGroupSubjectPlan> musicGroupSubjectPlanList = musicGroupSubjectPlanDao.getMusicSubjectClassPlan(musicGroupId);
     	
+    	Map<String,Integer> subjectMap = musicGroupSubjectPlanList.stream().collect(Collectors.toMap(MusicGroupSubjectPlan :: getSubName, MusicGroupSubjectPlan :: getSubjectId));
     	
-		return false;
+    	List<String> allSubjectNameList = musicGroupSubjectPlanList.stream().map(t -> t.getSubName()).collect(Collectors.toList());
+    	
+    	for(String subName : subjectNameList){
+    		if(!allSubjectNameList.contains(subName)){
+    			throw new BizException("当前乐团不支持[{}]声部", subName);
+    		}
+    	}
+    	
+    	//查询课程费用是否是0
+    	MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderDao.findByMusicGroupRegCalender(musicGroupId);
+    	if(musicGroupPaymentCalender == null){
+    		throw new BizException("请先创建乐团报名缴费");
+    	}
+    	
+    	List<MusicGroupPaymentCalenderCourseSettings> musicGroupPaymentCalenderCourseSettingsList = musicGroupPaymentCalenderCourseSettingsDao.queryCalenderCourseSettings(musicGroupPaymentCalender.getId());
+    	double d = musicGroupPaymentCalenderCourseSettingsList.stream().mapToDouble(t -> t.getCourseCurrentPrice().doubleValue()).sum();
+    	
+    	if(d > 0){
+    		throw new BizException("缴费项目中的课程费用为[{}]元,不能导入", d);
+    	}
+    	
+    	//检查用户是否已入团或在其他机构已注册
+    	for(StudentImportDto si : studentBasicList){
+    		SysUser sysUser = studentRegistrationDao.getSysUserByPhone(si.getMobileNo());
+            if (sysUser != null) {
+            	throw new BizException("该手机号[{}]已注册", si.getMobileNo());
+            }
+    	}
+    	
+    	SysUser sysUser = null;
+    	Integer userId = null;
+    	Student student = null;
+    	StudentRegistration studentRegistration = null;
+    	List<StudentRegistration> insertList = new ArrayList<StudentRegistration>();
+		Organization organization = organizationDao.get(musicGroup.getOrganId());
+    	//插入记录
+		for (StudentImportDto si : studentBasicList) {
+			sysUser = new SysUser();
+			sysUser.setPhone(si.getMobileNo());
+			sysUser.setUsername(si.getName());
+			sysUser.setGender(si.getSex().equals("男") ? 1 : 0);
+			sysUser.setUserType("STUDENT");
+			sysUser.setOrganId(musicGroup.getOrganId());
+			sysUser.setCreateTime(nowDate);
+			sysUser.setUpdateTime(nowDate);
+			teacherDao.addSysUser(sysUser);
+			userId = sysUser.getId();
+			
+			si.setUserId(userId);
+			
+			student = new Student(userId, subjectMap.get(si.getSubjectName()) + "");
+	        student.setCurrentGradeNum(SixPlusGradeEnum.get(si.getGradeName()).getCode());
+			studentDao.insert(student);
+			// 添加用户现金账户
+			sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
+			
+			studentRegistration = new StudentRegistration();
+	        String studentGrade = studentService.getStudentGrade(organization.getGradeType(), student.getCurrentGradeNum());
+	        studentRegistration.setCurrentGrade(studentGrade);
+	        studentRegistration.setActualSubjectId(subjectMap.get(si.getSubjectName()));
+	        studentRegistration.setIsAllowAdjust(YesOrNoEnum.YES);
+	        studentRegistration.setSubjectId(subjectMap.get(si.getSubjectName()));
+	        studentRegistration.setUserId(userId);
+	        studentRegistration.setName(si.getName());
+	        studentRegistration.setGender(sysUser.getGender());
+	        studentRegistration.setPaymentStatus(PaymentStatusEnum.YES);
+	        studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
+	        studentRegistration.setTemporaryCourseFee(BigDecimal.ZERO);
+	        studentRegistration.setMusicGroupPaymentCalenderId(null);
+	        studentRegistration.setTenantId(musicGroup.getTenantId());
+	        studentRegistration.setMusicGroupId(musicGroupId);
+	        studentRegistration.setCreateTime(nowDate);
+	        studentRegistration.setUpdateTime(nowDate);
+	        
+	        insertList.add(studentRegistration);
+		}
+        
+		if (insertList.size() > 0) {
+			studentRegistrationService.batchInsert(insertList);
+
+			Map<Integer, Long> subjectCountMap = insertList.stream().collect(
+					Collectors.groupingBy(StudentRegistration::getActualSubjectId, Collectors.counting()));
+
+			MusicGroupSubjectPlan musicOneSubjectClassPlan = null;
+			int totalStudentNum = 0;
+			for (Entry<Integer, Long> entry : subjectCountMap.entrySet()) {
+
+				musicOneSubjectClassPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, entry.getKey());
+				if (musicOneSubjectClassPlan == null) {
+					throw new BizException("系统数据[乐团声部设置]异常");
+				}
+				int applyNum = musicOneSubjectClassPlan.getApplyStudentNum() == null ? 0 : musicOneSubjectClassPlan.getApplyStudentNum();
+				musicOneSubjectClassPlan.setApplyStudentNum(applyNum + entry.getValue().intValue());
+				musicOneSubjectClassPlan.setPaidStudentNum((musicOneSubjectClassPlan.getPaidStudentNum() == null ? 0 : musicOneSubjectClassPlan
+						.getPaidStudentNum()) + entry.getValue().intValue());
+				musicOneSubjectClassPlan.setPaidZeroNum((musicOneSubjectClassPlan.getPaidZeroNum() == null ? 0 : musicOneSubjectClassPlan.getPaidZeroNum())
+						+ entry.getValue().intValue());
+				musicOneSubjectClassPlan.setUpdateTime(nowDate);
+				musicGroupSubjectPlanDao.update(musicOneSubjectClassPlan);
+
+				totalStudentNum += entry.getValue().intValue();
+			}
+
+			// 缴费相关
+			// 更新实际缴费人数
+			if (musicGroupPaymentCalender.getActualNum() == null) {
+				musicGroupPaymentCalender.setActualNum(totalStudentNum);
+			} else {
+				musicGroupPaymentCalender.setActualNum(musicGroupPaymentCalender.getActualNum() + totalStudentNum);
+			}
+			if (musicGroupPaymentCalender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.MUSIC_APPLY) {
+				if (musicGroupPaymentCalender.getExpectNum() == null) {
+					musicGroupPaymentCalender.setExpectNum(totalStudentNum);
+				} else {
+					musicGroupPaymentCalender.setExpectNum(musicGroupPaymentCalender.getExpectNum() + totalStudentNum);
+				}
+			}
+			musicGroupPaymentCalender.setUpdateTime(nowDate);
+			musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender);
+
+			MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
+			List<MusicGroupPaymentCalenderDetail> insertMusicGroupPaymentCalenderDetailList = new ArrayList<MusicGroupPaymentCalenderDetail>();
+
+			List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = new ArrayList<>();
+
+			List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsDao
+					.getWithPaymentCalender(musicGroupPaymentCalender.getId());
+
+			for (StudentImportDto si : studentBasicList) {
+				musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
+				musicGroupPaymentCalenderDetail.setTenantId(tenantId);
+				musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
+				musicGroupPaymentCalenderDetail.setUserId(si.getUserId());
+				musicGroupPaymentCalenderDetail.setResponsibleUserId(musicGroupPaymentCalender.getOperator());
+				musicGroupPaymentCalenderDetail.setPaymentStatus(PAID_COMPLETED);
+				musicGroupPaymentCalenderDetail.setPayTime(nowDate);
+				musicGroupPaymentCalenderDetail.setPaymentOrderId(null);
+				musicGroupPaymentCalenderDetail.setUseInCourse(0);
+				musicGroupPaymentCalenderDetail.setOpen(1);
+				musicGroupPaymentCalenderDetail.setUserStatus(null);
+				musicGroupPaymentCalenderDetail.setDeadlinePaymentDate(musicGroupPaymentCalender.getDeadlinePaymentDate());
+				musicGroupPaymentCalenderDetail.setStartPaymentDate(musicGroupPaymentCalender.getStartPaymentDate());
+				musicGroupPaymentCalenderDetail.setCreateTime(nowDate);
+				musicGroupPaymentCalenderDetail.setUpdateTime(nowDate);
+
+				insertMusicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
+
+				for (MusicGroupPaymentCalenderCourseSettings courseSetting : courseSettingsList) {
+					if (courseSetting.getCourseTotalMinuties() == null || courseSetting.getCourseTotalMinuties() == 0) {
+						continue;
+					}
+					MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail = new MusicGroupPaymentStudentCourseDetail();
+					musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
+					//musicGroupPaymentStudentCourseDetail.setMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetail.getId());
+					musicGroupPaymentStudentCourseDetail.setUserId(si.getUserId());
+					musicGroupPaymentStudentCourseDetail.setCourseType(courseSetting.getCourseType());
+					musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSetting.getCourseTotalMinuties());
+					musicGroupPaymentStudentCourseDetail.setCourseOriginalPrice(courseSetting.getCourseOriginalPrice());
+					musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSetting.getCourseCurrentPrice());
+					musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(0);
+					musicGroupPaymentStudentCourseDetail.setCreateTime(nowDate);
+					musicGroupPaymentStudentCourseDetail.setUpdateTime(nowDate);
+					musicGroupPaymentStudentCourseDetail.setTenantId(tenantId);
+					musicGroupPaymentStudentCourseDetails.add(musicGroupPaymentStudentCourseDetail);
+				}
+			}
+			if (insertMusicGroupPaymentCalenderDetailList.size() > 0) {
+				musicGroupPaymentCalenderDetailDao.batchInsert(insertMusicGroupPaymentCalenderDetailList);
+				
+				Map<Integer,Long> musicGroupPaymentCalenderDetailIdMap =  insertMusicGroupPaymentCalenderDetailList.stream().collect(Collectors.toMap(MusicGroupPaymentCalenderDetail :: getUserId, MusicGroupPaymentCalenderDetail :: getId));
+				
+				if (musicGroupPaymentStudentCourseDetails.size() > 0) {
+					for(MusicGroupPaymentStudentCourseDetail cd : musicGroupPaymentStudentCourseDetails){
+						cd.setMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetailIdMap.get(cd.getUserId()));
+					}
+					musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetails);
+				}
+			}
+		}
+    	
+		return true;
 	}
 
 	@Override
@@ -3684,10 +4072,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             registerPayDto.setNewCourse(courseSettings);
             for (StudentRegistration studentRegistration : studentRegistrationList) {
                 registerPayDto.setRegisterId(studentRegistration.getId().intValue());
-                HttpResponseResult result = this.pay(registerPayDto);
-                if (result.getCode() != 200) {
-                    return result;
-                }
+                this.pay(registerPayDto);
             }
         }
 

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java

@@ -212,6 +212,7 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 			List<StudentExtracurricularExercisesSituation> teacherServeWithDate = studentExtracurricularExercisesSituationDao.findTeacherServeWithDate(queryInfo.getMonday(), queryInfo.getSunday(), teacherIds, null);
 			Map<Integer, List<StudentExtracurricularExercisesSituation>> teacherServeMap = teacherServeWithDate.stream().collect(Collectors.groupingBy(StudentExtracurricularExercisesSituation::getTeacherId));
 			for (TeacherServeDto teacherServeDto : dataList) {
+				teacherServeDto.setHomeworkStuNum(teacherServeDto.getExpectExercisesNum() - teacherServeDto.getExerciseNum());
 				List<StudentExtracurricularExercisesSituation> tss = teacherServeMap.get(teacherServeDto.getTeacherId());
 				Set<Long> courseIds = new HashSet<>();
 				for (StudentExtracurricularExercisesSituation ts : tss) {

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -207,7 +207,13 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 				head = userTrainStat.get(i);
 			}
 		}
-		head.setStudentNum(studentDao.countStudentsWithOrgan(null));
+		Map<String,Object> params = new HashMap<String, Object>();
+		params.put("tenantId", queryInfo.getTenantId());
+		List<Integer> organIds = new ArrayList<Integer>();
+		organIds.add(queryInfo.getOrganId());
+		params.put("organIds", organIds);
+		
+		head.setStudentNum(studentDao.countStudentsWithOrgan(params));
 		if(StringUtils.isBlank(head.getAvatar())){
 			SysUser user = sysUserFeignService.queryUserById(queryInfo.getUserId());
 			if(user != null){

+ 28 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java

@@ -110,28 +110,38 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Integ
 
     @Override
     public PageInfo<SysMusicScoreAccompaniment> queryScorePage(SysExamSongQueryInfo queryInfo) {
-		if(queryInfo.getCategoriesId() != null){
+		if(queryInfo.getCategoriesIds() != null){
 			List<Integer> categoriesIdList = new ArrayList<>();
-			MusicScoreQueryInfo musicScoreQueryInfo = new MusicScoreQueryInfo();
-			Integer categoriesId = null;
-			if(StringUtils.isNotEmpty(queryInfo.getCategoriesId())){
-				categoriesId = Integer.parseInt(queryInfo.getCategoriesId());
+			String[] categoriesIds = queryInfo.getCategoriesIds().split(",");
+
+			for(String fc : categoriesIds){
+				SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(Integer.parseInt(fc));
+				
+				if(sysMusicScoreCategories == null){
+					throw new BizException("分类找不到");
+				}
+				categoriesIdList.add(Integer.parseInt(fc));
+				sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
+				getAllCategoryIdList(categoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
 			}
-			musicScoreQueryInfo.setParentId(categoriesId);
-			musicScoreQueryInfo.setOrganId(queryInfo.getOrganId());
-			musicScoreQueryInfo.setEnable(queryInfo.getEnable());
-			//List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
-			
-			SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(categoriesId);
+			queryInfo.setCategoriesIds(categoriesIdList.stream().map(String :: valueOf).collect(Collectors.joining(",")));
+		}
+		if(StringUtils.isNotBlank(queryInfo.getFilterCategoriesIds())){
+			String[] filterCategoriesIds = queryInfo.getFilterCategoriesIds().split(",");
+
+			List<Integer> filterCategoriesIdList = new ArrayList<>();
 			
-			if(sysMusicScoreCategories == null){
-				throw new BizException("分类找不到");
+			for(String fc : filterCategoriesIds){
+				SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(Integer.parseInt(fc));
+				
+				if(sysMusicScoreCategories == null){
+					throw new BizException("分类找不到");
+				}
+				filterCategoriesIdList.add(Integer.parseInt(fc));
+				sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
+				getAllCategoryIdList(filterCategoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
 			}
-			categoriesIdList.add(categoriesId);
-			sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
-			getAllCategoryIdList(categoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
-			
-			queryInfo.setCategoriesIdList(categoriesIdList);
+			queryInfo.setFilterCategoriesIds(filterCategoriesIdList.stream().map(String :: valueOf).collect(Collectors.joining(",")));
 		}
 		return this.queryPage(queryInfo);
     }

+ 3 - 3
mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -418,9 +418,9 @@
 			COUNT(smcr.id_) trainNum,
 			COUNT(DISTINCT DATE(smcr.create_time_)) trainDays,
 			SUM(smcr.play_time_) trainTime,
-			MAX(IF(heard_level_='BEGINNER' AND source_time_ &lt;= play_time_, smcr.score_, 0)) beginnerMaxScore,
-			MAX(IF(heard_level_='ADVANCED' AND source_time_ &lt;= play_time_, smcr.score_, 0)) advancedMaxScore,
-			MAX(IF(heard_level_='PERFORMER' AND source_time_ &lt;= play_time_, smcr.score_, 0)) performerMaxScore
+			MAX(IF(heard_level_='BEGINNER' AND source_time_ &gt;= play_time_, smcr.score_, 0)) beginnerMaxScore,
+			MAX(IF(heard_level_='ADVANCED' AND source_time_ &gt;= play_time_, smcr.score_, 0)) advancedMaxScore,
+			MAX(IF(heard_level_='PERFORMER' AND source_time_ &gt;= play_time_, smcr.score_, 0)) performerMaxScore,smcr.tenant_id_ tenantId
 		FROM sys_music_compare_record smcr
 		WHERE user_id_=#{userId} AND monday_ = #{monday}
 	</select>

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml

@@ -234,6 +234,12 @@
 					#{item}
 				</foreach>
 			</if>
+			<if test="filterCategoriesIds != null and filterCategoriesIds != ''">
+				AND find_in_set(sesc.id_,#{filterCategoriesIds}) = 0
+			</if>
+			<if test="categoriesIds != null and categoriesIds != ''">
+				AND find_in_set(sesc.id_,#{categoriesIds}) > 0
+			</if>
 			<if test="parentId != null">
 				AND sesc.parent_id_ = #{parentId}
 			</if>

+ 18 - 5
mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreAccompanimentController.java

@@ -11,14 +11,17 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.TenantConfig;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.service.SysMusicScoreAccompanimentService;
 import com.ym.mec.biz.service.TeacherService;
+import com.ym.mec.biz.service.TenantConfigService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -34,6 +37,9 @@ public class SysMusicScoreAccompanimentController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private TeacherService teacherService;
+    
+    @Autowired
+    private TenantConfigService tenantConfigService;
 
     @ApiOperation(value = "修改")
     @PostMapping("/update")
@@ -93,12 +99,19 @@ public class SysMusicScoreAccompanimentController extends BaseController {
             queryInfo.setOrganId(queryInfo.getOrganId() + "," + teacher.getFlowOrganRange());
         }
         if(queryInfo.getClientType() == null){
-            queryInfo.setClientType(ClientTypeEnum.NETWORK_ROOM);
+            queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
         }
         queryInfo.setCreateUserId(sysUser.getId());
         queryInfo.setShowFlag(1);
         queryInfo.setEnable(true);
         
+        TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", sysUser.getTenantId()));
+        
+        queryInfo.setCategoriesIds(tenantConfig.getTeachingMaterialId());
+        
+        //过滤合奏和考级
+        queryInfo.setFilterCategoriesIds("40,41,42");
+        
         PageInfo<SysMusicScoreAccompaniment> sysMusicScoreAccompanimentList = sysMusicScoreAccompanimentService.queryScorePage(queryInfo);
        
         String url = null,metronomeUrl = null;
@@ -107,10 +120,10 @@ public class SysMusicScoreAccompanimentController extends BaseController {
         	url = smsa.getUrl();
         	metronomeUrl = smsa.getMetronomeUrl();
         	
-        	smsa.setUrl(smsa.getMp3Url());
-        	smsa.setMetronomeUrl(smsa.getMetronomeMp3Url());
-        	smsa.setMp3Url(url);
-        	smsa.setMetronomeMp3Url(metronomeUrl);
+        	smsa.setUrl(smsa.getMetronomeMp3Url());
+        	smsa.setMetronomeUrl(smsa.getMp3Url());
+        	smsa.setMp3Url(metronomeUrl);
+        	smsa.setMetronomeMp3Url(url);
         }
         
         return succeed(sysMusicScoreAccompanimentList);

+ 16 - 0
mec-util/src/main/java/com/ym/mec/util/validator/CommonValidator.java

@@ -19,11 +19,14 @@ public class CommonValidator {
 	private static final String EMAIL_ADDR = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
 
 	private static final String PWD_CHECK_REGEX = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$";
+	
+	private static final String USER_NAME_CHECK_REGEX = "^[\\u4E00-\\u9FA5][\\u4E00-\\u9FA5|·]*[\\u4E00-\\u9FA5]$";
 
 	private static Pattern mobileNoPattern = Pattern.compile(MOBILE_NO);
 	private static Pattern telephoneNoPattern = Pattern.compile(TELEPHONE_NO);
 	private static Pattern emailAddrPattern = Pattern.compile(EMAIL_ADDR);
 	private static Pattern pwdCheckPattern = Pattern.compile(PWD_CHECK_REGEX);
+	private static Pattern userNameCheckPattern = Pattern.compile(USER_NAME_CHECK_REGEX);
 
 	/**
 	 * 是否邮箱地址
@@ -39,6 +42,19 @@ public class CommonValidator {
 	}
 
 	/**
+	 * 是否姓名
+	 * @param emailAddr
+	 * @return
+	 */
+	public static boolean isUserName(String userName) {
+		if (StringUtils.isBlank(userName)) {
+			return false;
+		}
+		Matcher matcher = userNameCheckPattern.matcher(userName);
+		return matcher.matches();
+	}
+
+	/**
 	 * 是否手机
 	 * @param mobileNo
 	 * @return boolean

+ 8 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -2296,13 +2296,19 @@ public class ExportController extends BaseController {
                 BigDecimal exercisesMessageRate = new BigDecimal(row.getExercisesMessageNum()).divide(new BigDecimal(row.getExercisesReplyNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred);
                 row.setExercisesMessageRate(exercisesMessageRate+"%");
             }
+            if(row.getExercisesReplyNum() <= 0){
+                row.setExercisesMessageTimelyRate(zero.toString()+"%");
+            }else {
+                BigDecimal exercisesMessageTimelyRate = new BigDecimal(row.getExercisesMessageTimelyNum()).divide(new BigDecimal(row.getExercisesReplyNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred);
+                row.setExercisesMessageTimelyRate(exercisesMessageTimelyRate+"%");
+            }
         }
 
         try {
-            String[] header = {"分部", "老师编号", "老师姓名", "服务周期", "课后训练(节)", "课外训练(人)", "布置次数", "提交次数", "评价次数", "作业点评率",
+            String[] header = {"分部", "老师编号", "老师姓名", "服务周期", "课后训练(节)", "课后训练(人)", "课外训练(人)", "预计训练布置(人次)", "实际训练布置(人次)", "提交次数", "评价次数", "及时评价次数", "及时评价率", "作业点评率",
                     "训练布置", "训练点评", "训练提交率",
                     "提醒时间", "操作人"};
-            String[] body = {"organName", "teacherId", "teacherName", "dateRange", "homeworkNum", "exerciseNum", "actualExercisesNum", "exercisesReplyNum","exercisesMessageNum","exercisesMessageRate",
+            String[] body = {"organName", "teacherId", "teacherName", "dateRange", "homeworkNum", "homeworkStuNum", "exerciseNum", "expectExercisesNum", "actualExercisesNum", "exercisesReplyNum","exercisesMessageNum","exercisesMessageTimelyNum","exercisesMessageTimelyRate","exercisesMessageRate",
                     "expectExercisesNum>actualExercisesNum?'异常':'正常'", "exercisesReplyNum>exercisesMessageNum?'异常':'正常'", "submitRate",
                     "remindDate", "operatorName"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, result.getRows());

BIN
mec-web/src/main/resources/excelTemplate/外部学生入团导入模板.xls