|  | @@ -7,10 +7,7 @@ import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.*;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.service.MusicGroupSchoolTermCourseDetailService;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.service.SysConfigService;
 | 
	
		
			
				|  |  | -import com.ym.mec.biz.service.SysMessageService;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.service.*;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.controller.BaseController;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.dal.BaseDAO;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.entity.HttpResponseResult;
 | 
	
	
		
			
				|  | @@ -67,7 +64,9 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 | 
	
		
			
				|  |  |  	@Autowired
 | 
	
		
			
				|  |  |  	private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
 | 
	
		
			
				|  |  |  	@Autowired
 | 
	
		
			
				|  |  | -	private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
 | 
	
		
			
				|  |  | +	private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private MusicGroupPaymentStudentCourseDetailService musicGroupPaymentStudentCourseDetailService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	private final Logger logger = LoggerFactory.getLogger(this.getClass());
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -167,6 +166,7 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  | +	@Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |  	public void musicSchoolTermPush() {
 | 
	
		
			
				|  |  |  		String remindCourseTime = sysConfigDao.findConfigValue(SysConfigService.REMIND_COURSE_TIME);
 | 
	
		
			
				|  |  |  		if(StringUtils.isEmpty(remindCourseTime)){
 | 
	
	
		
			
				|  | @@ -206,54 +206,7 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 | 
	
		
			
				|  |  |  		if(memberRankSetting != null){
 | 
	
		
			
				|  |  |  			memberName = memberRankSetting.getName();
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		//会员结束前15天自动创建乐团续费(默认提前15天)
 | 
	
		
			
				|  |  | -		String autoCreateMemberRenew = sysConfigDao.findConfigValue(SysConfigService.AUTO_CREATE_MEMBER_RENEW);
 | 
	
		
			
				|  |  | -		if(StringUtils.isEmpty(autoCreateMemberRenew)){
 | 
	
		
			
				|  |  | -			autoCreateMemberRenew = "15";
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  |  		Date date = new Date();
 | 
	
		
			
				|  |  | -		Map<String,String> studentMusicMap = MapUtil.convertMybatisMap(studentDao.queryAutoCreateStudentMap(autoCreateMemberRenew));
 | 
	
		
			
				|  |  | -		if(studentMusicMap.size() > 0){
 | 
	
		
			
				|  |  | -			for (String musicGroupId : studentMusicMap.keySet()) {
 | 
	
		
			
				|  |  | -				MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
 | 
	
		
			
				|  |  | -				// 所有缴费项目已完成排课才能创建下一个缴费项目
 | 
	
		
			
				|  |  | -				String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,null);
 | 
	
		
			
				|  |  | -				if (StringUtils.isNoneBlank(orignBatchNo)) {
 | 
	
		
			
				|  |  | -					logger.error("自动创建缴费项目失败,{} 乐团存在未排课的缴费项目",musicGroup.getName());
 | 
	
		
			
				|  |  | -					continue;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				MemberFeeSetting memberFee = memberFeeSettingDao.findByRankIdAndOrganId(musicGroup.getOrganId(), memberRankSetting.getId());
 | 
	
		
			
				|  |  | -				if(memberFee == null){
 | 
	
		
			
				|  |  | -					Organization organization = organizationDao.get(musicGroup.getOrganId());
 | 
	
		
			
				|  |  | -					logger.error("自动创建缴费项目失败,{} 分部会员收费标准未配置",organization.getName());
 | 
	
		
			
				|  |  | -					continue;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				//创建缴费项目
 | 
	
		
			
				|  |  | -				MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto = new MusicGroupPaymentCalenderDto();
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDto.setMusicGroupId(musicGroupId);
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDto.setMemberValidDate(6);
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDto.setMemo("系统自动创建缴费项目");
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDto.setMemberRankSettingId(memberRankSetting.getId());
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDto.setPayUserType(MusicGroupPaymentCalender.PayUserType.STUDENT);
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDto.setPaymentType(MusicGroupPaymentCalender.PaymentType.MUSIC_RENEW);
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDto.setPaymentPattern(1);
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDto.setMemberPaymentAmount(memberFee.getCurrentHalfYearFee().setScale(0, BigDecimal.ROUND_HALF_UP));
 | 
	
		
			
				|  |  | -				List<MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange> musicGroupPaymentDateRangeList = new ArrayList<>();
 | 
	
		
			
				|  |  | -				MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange range = new MusicGroupPaymentCalenderDto().new MusicGroupPaymentDateRange();
 | 
	
		
			
				|  |  | -				range.setStartPaymentDate(date);
 | 
	
		
			
				|  |  | -				range.setDeadlinePaymentDate(DateUtil.addMonths(date,1));
 | 
	
		
			
				|  |  | -				musicGroupPaymentDateRangeList.add(range);
 | 
	
		
			
				|  |  | -				musicGroupPaymentCalenderDto.setMusicGroupPaymentDateRangeList(musicGroupPaymentDateRangeList);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -				try {
 | 
	
		
			
				|  |  | -					musicGroupPaymentCalenderService.create(musicGroupPaymentCalenderDto);
 | 
	
		
			
				|  |  | -				}catch (Exception e){
 | 
	
		
			
				|  |  | -					logger.error("{} 乐团自动创建缴费项目失败,失败原因:{}",musicGroup.getName(),e.getMessage());
 | 
	
		
			
				|  |  | -					continue;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  		//会员结束前15天提醒学员续费
 | 
	
		
			
				|  |  |  		/*String pushMemberRenew = sysConfigDao.findConfigValue(SysConfigService.PUSH_MEMBER_RENEW);
 | 
	
		
			
				|  |  |  		if(StringUtils.isEmpty(pushMemberRenew)){
 | 
	
	
		
			
				|  | @@ -314,6 +267,81 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 | 
	
		
			
				|  |  |  					null,
 | 
	
		
			
				|  |  |  					"STUDENT",memberName,pushMemberRenewAgain);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//会员结束前15天自动创建乐团续费(默认提前15天)
 | 
	
		
			
				|  |  | +		String autoCreateMemberRenew = sysConfigDao.findConfigValue(SysConfigService.AUTO_CREATE_MEMBER_RENEW);
 | 
	
		
			
				|  |  | +		if(StringUtils.isEmpty(autoCreateMemberRenew)){
 | 
	
		
			
				|  |  | +			autoCreateMemberRenew = "15";
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		Map<String,String> studentMusicMap = MapUtil.convertMybatisMap(studentDao.queryAutoCreateStudentMap(autoCreateMemberRenew));
 | 
	
		
			
				|  |  | +		if(studentMusicMap.size() > 0){
 | 
	
		
			
				|  |  | +			for (String musicGroupId : studentMusicMap.keySet()) {
 | 
	
		
			
				|  |  | +				MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
 | 
	
		
			
				|  |  | +				// 所有缴费项目已完成排课才能创建下一个缴费项目
 | 
	
		
			
				|  |  | +				String orignBatchNo = musicGroupPaymentStudentCourseDetailService.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,null);
 | 
	
		
			
				|  |  | +				if (StringUtils.isNoneBlank(orignBatchNo)) {
 | 
	
		
			
				|  |  | +					logger.error("自动创建缴费项目失败,{} 乐团存在未排课的缴费项目",musicGroup.getName());
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				MemberFeeSetting memberFee = memberFeeSettingDao.findByRankIdAndOrganId(musicGroup.getOrganId(), memberRankSetting.getId());
 | 
	
		
			
				|  |  | +				if(memberFee == null){
 | 
	
		
			
				|  |  | +					Organization organization = organizationDao.get(musicGroup.getOrganId());
 | 
	
		
			
				|  |  | +					logger.error("自动创建缴费项目失败,{} 分部会员收费标准未配置",organization.getName());
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				//创建缴费项目
 | 
	
		
			
				|  |  | +				MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto = new MusicGroupPaymentCalenderDto();
 | 
	
		
			
				|  |  | +				musicGroupPaymentCalenderDto.setMusicGroupId(musicGroupId);
 | 
	
		
			
				|  |  | +				musicGroupPaymentCalenderDto.setMemberValidDate(6);
 | 
	
		
			
				|  |  | +				musicGroupPaymentCalenderDto.setMemo("系统自动创建缴费项目");
 | 
	
		
			
				|  |  | +				musicGroupPaymentCalenderDto.setMemberRankSettingId(memberRankSetting.getId());
 | 
	
		
			
				|  |  | +				musicGroupPaymentCalenderDto.setPayUserType(MusicGroupPaymentCalender.PayUserType.STUDENT);
 | 
	
		
			
				|  |  | +				musicGroupPaymentCalenderDto.setPaymentType(MusicGroupPaymentCalender.PaymentType.MUSIC_RENEW);
 | 
	
		
			
				|  |  | +				musicGroupPaymentCalenderDto.setPaymentPattern(1);
 | 
	
		
			
				|  |  | +				musicGroupPaymentCalenderDto.setMemberPaymentAmount(memberFee.getCurrentHalfYearFee().setScale(0, BigDecimal.ROUND_HALF_UP));
 | 
	
		
			
				|  |  | +				List<MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange> musicGroupPaymentDateRangeList = new ArrayList<>();
 | 
	
		
			
				|  |  | +				MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange range = new MusicGroupPaymentCalenderDto().new MusicGroupPaymentDateRange();
 | 
	
		
			
				|  |  | +				range.setStartPaymentDate(date);
 | 
	
		
			
				|  |  | +				range.setDeadlinePaymentDate(DateUtil.addMonths(date,1));
 | 
	
		
			
				|  |  | +				musicGroupPaymentDateRangeList.add(range);
 | 
	
		
			
				|  |  | +				musicGroupPaymentCalenderDto.setMusicGroupPaymentDateRangeList(musicGroupPaymentDateRangeList);
 | 
	
		
			
				|  |  | +				String batchNo = "";
 | 
	
		
			
				|  |  | +				try {
 | 
	
		
			
				|  |  | +					batchNo = musicGroupPaymentCalenderService.create(musicGroupPaymentCalenderDto);
 | 
	
		
			
				|  |  | +				}catch (Exception e){
 | 
	
		
			
				|  |  | +					logger.error("{} 乐团自动创建缴费项目失败,失败原因:{}",musicGroup.getName(),e.getMessage());
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				MusicGroupPaymentCalender calender = musicGroupPaymentCalenderService.findByBatchNo(batchNo).get(0);
 | 
	
		
			
				|  |  | +				Set<Integer> userIdList = Arrays.stream(studentMusicMap.get(musicGroupId).split(",")).map(Integer::new).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | +				musicGroupPaymentCalenderDetailService.batchAdd(calender.getId(),userIdList,musicGroup);
 | 
	
		
			
				|  |  | +				Map<Integer, String> studentPhoneMap = MapUtil.convertMybatisMap(teacherDao.queryPhoneByIds(studentMusicMap.get(musicGroupId)));
 | 
	
		
			
				|  |  | +				Map<Integer,String> userMap = new HashMap<>(userIdList.size());
 | 
	
		
			
				|  |  | +				Map<Integer,String> userMap1 = new HashMap<>(userIdList.size());
 | 
	
		
			
				|  |  | +				for (Integer studentId : userIdList) {
 | 
	
		
			
				|  |  | +					userMap.put(studentId,studentPhoneMap.get(studentId));
 | 
	
		
			
				|  |  | +					userMap1.put(studentId,studentId.toString());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
 | 
	
		
			
				|  |  | +				String pushUrl = baseApiUrl + "/#/musicGroupRenew?calenderId=" + calender.getId() + "&id=" + musicGroupId;
 | 
	
		
			
				|  |  | +				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
 | 
	
		
			
				|  |  | +						MessageTypeEnum.AUTO_STUDENT_MEMBER_RENEW_MESSAGE,
 | 
	
		
			
				|  |  | +						userMap,
 | 
	
		
			
				|  |  | +						null,
 | 
	
		
			
				|  |  | +						0,
 | 
	
		
			
				|  |  | +						pushUrl,
 | 
	
		
			
				|  |  | +						null,memberName,autoCreateMemberRenew);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
 | 
	
		
			
				|  |  | +						MessageTypeEnum.AUTO_STUDENT_MEMBER_RENEW_MESSAGE,
 | 
	
		
			
				|  |  | +						userMap1,
 | 
	
		
			
				|  |  | +						null,
 | 
	
		
			
				|  |  | +						0,
 | 
	
		
			
				|  |  | +						pushUrl,
 | 
	
		
			
				|  |  | +						"STUDENT",memberName,autoCreateMemberRenew);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	private MusicGroupSchoolTermCourseDetail getCourseDetail(MusicGroupSchoolTermCourseDetail courseDetail){
 |