Kaynağa Gözat

update:外部学员导入乐团

yonge 3 yıl önce
ebeveyn
işleme
e423c63771

+ 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;
+	}
+}

+ 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;
+	}
 
 }

+ 413 - 31
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,234 @@ 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));
+    	
+    	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.getGradeName().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(FivePlusGradeEnum.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(student.getCurrentGradeNum());
+	        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);
+			}
+			if (musicGroupPaymentStudentCourseDetails.size() > 0) {
+				musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetails);
+			}
+		}
     	
-		return false;
+		return true;
 	}
 
 	@Override

+ 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

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/ImportController.java

@@ -114,7 +114,7 @@ public class ImportController extends BaseController {
 
     @ApiOperation(value = "导入学生至乐团中")
     @PostMapping(value = "studentToMusicGroup")
-    @PreAuthorize("@pcs.hasPermissions('import/studentToMusicGroup')")
+    //@PreAuthorize("@pcs.hasPermissions('import/studentToMusicGroup')")
     public HttpResponseResult<List<StudentPaymentRouteOrder>> importStudentToMusicGroup(String musicGroupId, @RequestParam("file") MultipartFile file) throws Exception {
     	Map<String, List<Map<String, Object>>> sheetsListMap = POIUtil.importExcel(new ByteArrayInputStream(file.getBytes()), 2, file.getOriginalFilename());
         boolean result =  musicGroupService.importStudentToMusicGroup(musicGroupId, sheetsListMap);

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