Browse Source

Merge remote-tracking branch 'origin/master'

周箭河 5 năm trước cách đây
mục cha
commit
6630378663
19 tập tin đã thay đổi với 309 bổ sung192 xóa
  1. 1 1
      cms/src/main/java/com/ym/mec/cms/CmsServerApplication.java
  2. 2 2
      cms/src/main/java/com/ym/mec/cms/controller/NewsController.java
  3. 15 13
      cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsInformationServiceImpl.java
  4. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  5. 13 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PracticeGroup.java
  6. 25 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCourseRewardQueryInfo.java
  7. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  8. 17 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  9. 18 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  10. 35 125
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  11. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  12. 10 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  13. 40 12
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  14. 4 4
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  15. 10 4
      mec-biz/src/main/resources/config/mybatis/TeacherCourseRewardDao.xml
  16. 13 0
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  17. 53 0
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  18. 6 0
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherCourseRewardController.java
  19. 20 4
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduPracticeGroupController.java

+ 1 - 1
cms/src/main/java/com/ym/mec/cms/CmsServerApplication.java

@@ -17,7 +17,7 @@ import com.spring4all.swagger.EnableSwagger2Doc;
 @EnableDiscoveryClient
 @EnableFeignClients
 @MapperScan("com.ym.mec.cms.dal.dao")
-@ComponentScan(basePackages = { "com.ym.mec.cms", "com.ym.mec.common.config", "com.ym.mec.common.security" })
+@ComponentScan(basePackages = { "com.ym.mec.cms", "com.ym.mec.im", "com.ym.mec.auth", "com.ym.mec.common.config", "com.ym.mec.common.security" })
 @Configuration
 @EnableSwagger2Doc
 public class CmsServerApplication {

+ 2 - 2
cms/src/main/java/com/ym/mec/cms/controller/NewsController.java

@@ -1,5 +1,7 @@
 package com.ym.mec.cms.controller;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
@@ -14,8 +16,6 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.cms.controller.queryinfo.NewsInformationQueryInfo;
 import com.ym.mec.cms.dal.entity.SysNewsInformation;
 import com.ym.mec.cms.service.SysNewsInformationService;

+ 15 - 13
cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsInformationServiceImpl.java

@@ -83,24 +83,26 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 
 		boolean isNewer = false;
 		Date date = new Date();
-		String startDateStr = "2020-05-01";
-		Date startDate = null;
-		try {
-			startDate = sdf.parse(startDateStr);
-		} catch (ParseException e) {
-			throw new RuntimeException(e);
+		Date startDate = queryInfo.getDate();
+		if (startDate == null) {
+			try {
+				String startDateStr = "2020-05-01";
+				startDate = sdf.parse(startDateStr);
+			} catch (ParseException e) {
+				throw new RuntimeException(e);
+			}
 		}
-		if (date.after(startDate)) {
-			if (user != null) {
+		if (queryInfo.getTenantId() == 1 && date.after(startDate)) {
+			if (user != null && "18696158274".equals(user.getPhone()) == false) {
 				isNewer = webFeignService.isPurchasedPracticeCourse(user.getId()) == false;
 				SysNewsInformation info = new SysNewsInformation();
 				info.setOrder(1);
 				if (isNewer) {
 					info.setLinkUrl(serverContextPath + "/#/auditionActive/1");
-					info.setCoverImage("");
+					info.setCoverImage("https://daya-online.oss-cn-beijing.aliyuncs.com/tempActivity/3_1.jpg");
 				} else {
 					info.setLinkUrl(serverContextPath + "/#/auditionActive/1");
-					info.setCoverImage("");
+					info.setCoverImage("https://daya-online.oss-cn-beijing.aliyuncs.com/tempActivity/3_2.jpg");
 				}
 				pageInfos.getRows().add(info);
 			}
@@ -126,13 +128,13 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 		SysNewsInformation info = new SysNewsInformation();
 		info.setOrder(1);
 
-		if (date.after(startDate)) {
+		if (queryInfo.getTenantId() == 1 && date.after(startDate)) {
 			if (isNewer) {
 				info.setLinkUrl(serverContextPath + "/#/auditionActive/1");
-				info.setCoverImage("");
+				info.setCoverImage("https://daya-online.oss-cn-beijing.aliyuncs.com/tempActivity/5_1.jpg");
 			} else {
 				info.setLinkUrl(serverContextPath + "/#/auditionActive/1");
-				info.setCoverImage("");
+				info.setCoverImage("https://daya-online.oss-cn-beijing.aliyuncs.com/tempActivity/5_2.jpg");
 			}
 			pageInfos.getRows().add(info);
 		} else {

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -1457,4 +1457,20 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     List<Long> findNotStartCourseByIds(@Param("courseScheduleIds") List<Long> courseScheduleIds);
+
+    /**
+     * 获取第一节课时间
+     * @param practiceGroupId
+     * @param groupType
+     * @return
+     */
+    Date getFirstTime(@Param("practiceGroupId") Long practiceGroupId, @Param("groupType") String groupType);
+
+    /**
+     * 获取最后一节课时间
+     * @param practiceGroupId
+     * @param groupType
+     * @return
+     */
+    Date getLastTime(@Param("practiceGroupId") Long practiceGroupId, @Param("groupType") String groupType);
 }

+ 13 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PracticeGroup.java

@@ -1,11 +1,10 @@
 package com.ym.mec.biz.dal.entity;
 
-import java.util.Date;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
 import com.ym.mec.biz.dal.enums.GroupStatusEnum;
 import com.ym.mec.biz.dal.enums.PracticeGroupType;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.util.Date;
 
 /**
  * 对应数据库表(practice_group):
@@ -40,6 +39,8 @@ public class PracticeGroup {
 	
 	/**  */
 	private java.util.Date coursesStartDate;
+
+	private String coursesStartDates;
 	
 	/**  */
 	private java.util.Date coursesExpireDate;
@@ -65,6 +66,14 @@ public class PracticeGroup {
 
 	private Integer educationalTeacherId;
 
+	public String getCoursesStartDates() {
+		return coursesStartDates;
+	}
+
+	public void setCoursesStartDates(String coursesStartDates) {
+		this.coursesStartDates = coursesStartDates;
+	}
+
 	public Integer getEducationalTeacherId() {
 		return educationalTeacherId;
 	}

+ 25 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCourseRewardQueryInfo.java

@@ -2,12 +2,34 @@ package com.ym.mec.biz.dal.page;
 
 import com.ym.mec.common.page.QueryInfo;
 
+import java.util.Date;
+
 public class TeacherCourseRewardQueryInfo extends QueryInfo {
     private Integer teacherId;
 
     private String organId;
 
-    private Integer settlementStatus;
+    private String settlementStatus;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
 
     public Integer getTeacherId() {
         return teacherId;
@@ -25,11 +47,11 @@ public class TeacherCourseRewardQueryInfo extends QueryInfo {
         this.organId = organId;
     }
 
-    public Integer getSettlementStatus() {
+    public String getSettlementStatus() {
         return settlementStatus;
     }
 
-    public void setSettlementStatus(Integer settlementStatus) {
+    public void setSettlementStatus(String settlementStatus) {
         this.settlementStatus = settlementStatus;
     }
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -176,6 +176,8 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
 
     String COURSE_AFTER_BUFFER_TIME = "course_after_buffer_time";
 
+    String PRACTICE_PROMOTION_ACTIVITY_START_DATE = "practice_promotion_activity_start_date";
+
     String NEW_MSG_PUSH = "您收到一条作业回复,请点击查看";
 
     /**

+ 17 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -47,6 +47,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static com.ym.mec.biz.dal.enums.GroupType.PRACTICE;
 import static com.ym.mec.biz.dal.enums.PracticeGroupType.*;
 import static com.ym.mec.biz.dal.enums.SignInStatusEnum.*;
 
@@ -2040,7 +2041,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         }
         checkNewCourseSchedules(courseSchedules, false);
         //如果是陪练课,调整时间不允许超过有效期
-        if(groupType == GroupType.PRACTICE){
+        if(groupType == PRACTICE){
             for (CourseSchedule e:courseSchedules) {
                 //已点名的不允许调整
                 List<StudentAttendance> studentAttendances = studentAttendanceDao.findByCourseId(e.getId());
@@ -2658,7 +2659,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 								ts.setExpectSalary(oldTS.getExpectSalary());
 							}
 						}
-					} else if (newCourseSchedule.getGroupType() == GroupType.PRACTICE) {
+					} else if (newCourseSchedule.getGroupType() == PRACTICE) {
 						List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao
 								.queryByUserId(teacherId);
 						if (teacherDefaultPracticeGroupSalaryList != null && teacherDefaultPracticeGroupSalaryList.size() > 0) {
@@ -3713,7 +3714,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if(Objects.isNull(oldCourseSchedule)){
             throw new BizException("课程不存在");
         }
-        if(!oldCourseSchedule.getGroupType().equals(GroupType.PRACTICE)){
+        if(!oldCourseSchedule.getGroupType().equals(PRACTICE)){
             throw new BizException("请选择网管课");
         }
         //已点名的不允许调整
@@ -3787,6 +3788,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		courseScheduleComplaintsDao.delByCourseScheduleId(courseScheduleId);
         courseScheduleDao.update(oldCourseSchedule);
         courseScheduleModifyLogDao.insert(scheduleModifyLog);
+		if(practiceGroup.getType() == TRIAL){
+			practiceGroup.setCoursesStartDate(courseScheduleDao.getFirstTime(practiceGroup.getId(),PRACTICE.getCode()));
+			practiceGroup.setCoursesExpireDate(courseScheduleDao.getLastTime(practiceGroup.getId(),PRACTICE.getCode()));
+			practiceGroup.setUpdateTime(date);
+			practiceGroupDao.update(practiceGroup);
+		}
     }
 
     @Override
@@ -3806,7 +3813,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if(Objects.isNull(oldCourseSchedule)){
             throw new BizException("调整失败: 课程已结束");
         }
-        if(!oldCourseSchedule.getGroupType().equals(GroupType.PRACTICE)){
+        if(!oldCourseSchedule.getGroupType().equals(PRACTICE)){
             throw new BizException("请选择网管课");
         }
         if(teacherId.equals(oldCourseSchedule.getActualTeacherId())){
@@ -3876,12 +3883,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if(Objects.isNull(teacherId)){
             throw new BizException("请指定上课老师");
         }
-        List<CourseSchedule> courseSchedules = courseScheduleDao.findSurplusCourseWithGroup(GroupType.PRACTICE,practiceGroupId);
+        List<CourseSchedule> courseSchedules = courseScheduleDao.findSurplusCourseWithGroup(PRACTICE,practiceGroupId);
         if(courseSchedules != null && courseSchedules.size() > 0){
             courseSchedules = courseSchedules.stream().filter(courseSchedule -> !courseSchedule.getActualTeacherId().equals(teacherId)).collect(Collectors.toList());
         }
 		PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(practiceGroupId));
-		ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(practiceGroupId, GroupType.PRACTICE.getCode());
+		ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(practiceGroupId, PRACTICE.getCode());
         if(Objects.nonNull(educationalTeacherId)&&!educationalTeacherId.equals(practiceGroup.getEducationalTeacherId())){
 			if(Objects.nonNull(practiceGroup.getEducationalTeacherId())){
 				ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(practiceGroup.getEducationalTeacherId().toString())};
@@ -3903,11 +3910,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			classGroup.setName(groupName);
 			classGroup.setSubjectIdList(subjectId.toString());
 			classGroupDao.update(classGroup);
-			courseScheduleDao.updateCourseNameByGroup(practiceGroupId,GroupType.PRACTICE,groupName);
+			courseScheduleDao.updateCourseNameByGroup(practiceGroupId, PRACTICE,groupName);
 		}
 		practiceGroupDao.update(practiceGroup);
-        classGroupTeacherMapperService.updateTeacher(practiceGroupId,teacherId,GroupType.PRACTICE.getCode());
-        classGroupTeacherSalaryDao.updateTeacher(practiceGroupId,teacherId,GroupType.PRACTICE.getCode());
+        classGroupTeacherMapperService.updateTeacher(practiceGroupId,teacherId, PRACTICE.getCode());
+        classGroupTeacherSalaryDao.updateTeacher(practiceGroupId,teacherId, PRACTICE.getCode());
         practiceGroupDao.updateUserId(practiceGroupId,teacherId);
         if(courseSchedules == null || courseSchedules.size() == 0){
             return;
@@ -3941,7 +3948,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				}
 				courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
 			}else{
-				List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotStartCourses(practiceGroupId, GroupType.PRACTICE);
+				List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotStartCourses(practiceGroupId, PRACTICE);
 				if(!CollectionUtils.isEmpty(groupNotStartCourses)){
 					SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
 					BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());

+ 18 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java

@@ -103,6 +103,8 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
     private ContractService contractService;
     @Autowired
     private StudentDao studentDao;
+    @Autowired
+    private TeacherCourseRewardService teacherCourseRewardService;
 
     private static final Logger LOGGER = LoggerFactory
             .getLogger(EduPracticeGroupService.class);
@@ -172,19 +174,18 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             throw new BizException("老师不存在");
         }
 
-        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(practiceGroupBuyParams.getStudentId());
-        Integer buyMonths=practiceGroupBuyParams.getBuyMonths();
-        if(studentExitChargePractices<=0){
-            practiceGroupBuyParams.setBuyMonths(2);
-        }
-
         SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
         SysConfig practiceBuyActivityExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_BUY_ACTIVITY_EXPIRE_DATE);
         Date practiceBuyActivityExpireDate= DateUtil.stringToDate(practiceBuyActivityExpireDateConfig.getParanValue(),"yyyy-MM-dd HH:mm:ss");
+        SysConfig practicePromotionActivityStartDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_PROMOTION_ACTIVITY_START_DATE);
+        Date practicePromotionActivityStartDate = DateUtil.stringToDate(practicePromotionActivityStartDateConfig.getParanValue(), "yyyy-MM-dd HH:mm:ss");
 
         Date now=new Date();
+
+        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(practiceGroupBuyParams.getStudentId());
+
         LocalDate courseStartDay=LocalDate.now();
         LocalDate tempCourseLocalDate=LocalDate.parse("2020-03-01", DateUtil.dateFormatter);
         if(courseStartDay.isBefore(tempCourseLocalDate)){
@@ -276,15 +277,17 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             throw new BizException("所在城市暂不参与此活动");
         }
         BigDecimal oneMonthPrice;
-        if(practiceBuyActivityExpireDate.after(now)&&studentExitChargePractices>0){
+        if(practiceBuyActivityExpireDate.after(now)){
             oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceActivityPrice():practiceGroupSellPrice.getTwiceActivityPrice();
-            if(practiceGroupBuyParams.getBuyMonths()>=3){
+            if(!now.before(practicePromotionActivityStartDate)&&practiceGroupBuyParams.getBuyMonths()>=3&&studentExitChargePractices>0){
                 oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceQuartActivityPrice():practiceGroupSellPrice.getTwiceQuartActivityPrice();
+            }else if(!now.before(practicePromotionActivityStartDate)&&studentExitChargePractices<=0){
+                oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceOriginalPrice():practiceGroupSellPrice.getTwiceOriginalPrice();
             }
         }else{
             oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceOriginalPrice():practiceGroupSellPrice.getTwiceOriginalPrice();
         }
-        BigDecimal amount= oneMonthPrice.multiply(new BigDecimal(buyMonths));
+        BigDecimal amount= oneMonthPrice.multiply(new BigDecimal(practiceGroupBuyParams.getBuyMonths()));
 
         practiceGroupBuyParams.setDrillTimesJson(drillTimesObject.toJSONString());
         practiceGroupBuyParams.setOrganId(sysUser.getOrganId());
@@ -568,6 +571,12 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             LOGGER.error("网管课[{}]购买协议错误:{}",order.getMusicGroupId(),e.getMessage(),e.getMessage());
         }
 
+        try {
+            teacherCourseRewardService.addConvertReward(practiceGroup.getStudentId(), practiceGroup.getUserId());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
         Teacher teacher = teacherService.getDetail(practiceGroup.getUserId());
 
         String groupStartTime=DateUtil.dateToString(practiceGroup.getCoursesStartDate(),"yyyy年MM月dd日");

+ 35 - 125
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -1,129 +1,18 @@
 package com.ym.mec.biz.service.impl;
 
-import java.math.BigDecimal;
-import java.time.DayOfWeek;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.WeekFields;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Random;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
-import org.springframework.util.CollectionUtils;
-
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-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.ClassGroupTeacherSalaryDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
-import com.ym.mec.biz.dal.dao.EmployeeDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.PracticeGroupDao;
-import com.ym.mec.biz.dal.dao.PracticeGroupSellPriceDao;
-import com.ym.mec.biz.dal.dao.PracticeLessonApplyDao;
-import com.ym.mec.biz.dal.dao.StudentAttendanceDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dao.TeacherDefaultPracticeGroupSalaryDao;
-import com.ym.mec.biz.dal.dao.TeacherFreeTimeDao;
-import com.ym.mec.biz.dal.dto.CourseScheduleDto;
-import com.ym.mec.biz.dal.dto.ExtendTeacherBasicDto;
-import com.ym.mec.biz.dal.dto.PracticeBuyResultDto;
-import com.ym.mec.biz.dal.dto.PracticeCourseDto;
-import com.ym.mec.biz.dal.dto.PracticeDrillTimeDto;
-import com.ym.mec.biz.dal.dto.PracticeGroupBuyDto;
-import com.ym.mec.biz.dal.dto.PracticeGroupDto;
-import com.ym.mec.biz.dal.dto.SimpleUserDto;
-import com.ym.mec.biz.dal.dto.StudentBuyPracticeDto;
-import com.ym.mec.biz.dal.dto.TeacherBasicDto;
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherSalary;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
-import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
-import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.PracticeGroup;
-import com.ym.mec.biz.dal.entity.PracticeGroupSellPrice;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.Subject;
-import com.ym.mec.biz.dal.entity.SysConfig;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
-import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
-import com.ym.mec.biz.dal.entity.Teacher;
-import com.ym.mec.biz.dal.entity.TeacherAttendance;
-import com.ym.mec.biz.dal.entity.TeacherDefaultPracticeGroupSalary;
-import com.ym.mec.biz.dal.entity.TeacherFreeTime;
-import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.PracticeGroupType;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+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.enums.*;
 import com.ym.mec.biz.dal.page.PracticeGroupQueryInfo;
 import com.ym.mec.biz.dal.page.StudentBuyPracticeQueryInfo;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
-import com.ym.mec.biz.service.ContractService;
-import com.ym.mec.biz.service.CourseScheduleService;
-import com.ym.mec.biz.service.GroupClassService;
-import com.ym.mec.biz.service.PayService;
-import com.ym.mec.biz.service.PracticeGroupService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysMessageService;
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
-import com.ym.mec.biz.service.TeacherCourseRewardService;
-import com.ym.mec.biz.service.TeacherService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
@@ -139,6 +28,24 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.WeekFields;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGroup> implements PracticeGroupService {
@@ -2305,6 +2212,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         SysConfig practicePayMaxMonthConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_PAY_MAX_MONTH);
         SysConfig practicePayDrillTimesOnOneWeekConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_PAY_DRILL_TIMES_ON_ONE_WEEK);
+        SysConfig practicePromotionActivityStartDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_PROMOTION_ACTIVITY_START_DATE);
         SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
         Student student = studentDao.get(userId);
         List<Subject> subjects = subjectDao.findBySubjectByIdList(practiceSubjectIdListConfig.getParanValue());
@@ -2327,6 +2235,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         result.put("practicePayDrillTimesOnOneWeek", practicePayDrillTimesOnOneWeekConfig.getParanValue(Integer.class));
         result.put("practiceGroupSellPrice", practiceGroupSellPrice);
         result.put("balance", Objects.isNull(userCashAccount)?0:userCashAccount.getBalance());
+        result.put("practicePromotionActivityStartTime", practicePromotionActivityStartDateConfig.getParanValue());
         return result;
     }
 
@@ -2786,19 +2695,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             throw new BizException("老师不存在");
         }
 
-        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(practiceGroupBuyParams.getStudentId());
-        Integer buyMonths=practiceGroupBuyParams.getBuyMonths();
-        if(studentExitChargePractices<=0){
-            practiceGroupBuyParams.setBuyMonths(2);
-        }
-
         SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
         SysConfig practiceBuyActivityExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_BUY_ACTIVITY_EXPIRE_DATE);
         Date practiceBuyActivityExpireDate=DateUtil.stringToDate(practiceBuyActivityExpireDateConfig.getParanValue(),"yyyy-MM-dd HH:mm:ss");
+        SysConfig practicePromotionActivityStartDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_PROMOTION_ACTIVITY_START_DATE);
+        Date practicePromotionActivityStartDate = DateUtil.stringToDate(practicePromotionActivityStartDateConfig.getParanValue(), "yyyy-MM-dd HH:mm:ss");
 
         Date now=new Date();
+
+        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(practiceGroupBuyParams.getStudentId());
+
         LocalDate courseStartDay=LocalDate.now();
         LocalDate tempCourseLocalDate=LocalDate.parse("2020-03-01", DateUtil.dateFormatter);
         if(courseStartDay.isBefore(tempCourseLocalDate)){
@@ -2905,15 +2813,17 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             throw new BizException("所在城市暂不参与此活动");
         }
         BigDecimal oneMonthPrice;
-        if(practiceBuyActivityExpireDate.after(now)&&studentExitChargePractices>0){
+        if(practiceBuyActivityExpireDate.after(now)){
             oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceActivityPrice():practiceGroupSellPrice.getTwiceActivityPrice();
-            if(practiceGroupBuyParams.getBuyMonths()>=3){
+            if(!now.before(practicePromotionActivityStartDate)&&practiceGroupBuyParams.getBuyMonths()>=3&&studentExitChargePractices>0){
                 oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceQuartActivityPrice():practiceGroupSellPrice.getTwiceQuartActivityPrice();
+            }else if(!now.before(practicePromotionActivityStartDate)&&studentExitChargePractices<=0){
+                oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceOriginalPrice():practiceGroupSellPrice.getTwiceOriginalPrice();
             }
         }else{
             oneMonthPrice=practiceGroupBuyParams.getDrillTimesOnWeek()==1?practiceGroupSellPrice.getOnceOriginalPrice():practiceGroupSellPrice.getTwiceOriginalPrice();
         }
-        BigDecimal amount= oneMonthPrice.multiply(new BigDecimal(buyMonths));
+        BigDecimal amount= oneMonthPrice.multiply(new BigDecimal(practiceGroupBuyParams.getBuyMonths()));
 
         practiceGroupBuyParams.setDrillTimesJson(drillTimesObject.toJSONString());
         practiceGroupBuyParams.setOrganId(sysUser.getOrganId());

+ 9 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -2452,7 +2452,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	}
 
 	@Override
-	@Transactional(rollbackFor = Exception.class)
+	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void addVipGroupStudents(Long vipGroupId, List<Integer> studentIds) {
 		if(CollectionUtils.isEmpty(studentIds)){
 			throw new BizException("请选择学生");
@@ -2676,6 +2676,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			}
 
 			imGroupMemberList.add(new ImGroupMember(studentId.toString()));
+
+			if(vipGroup.getOnlineClassesNum()>0){
+				try {
+					teacherCourseRewardService.addConvertReward(studentId, vipGroup.getUserId());
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
 		}
 
 		if(!CollectionUtils.isEmpty(classGroupStudentMappers)){

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -2980,5 +2980,15 @@
         </foreach>
         AND cs.status_ = 'NOT_START'
     </select>
+    <select id="getLastTime" resultType="java.util.Date">
+        SELECT MAX(CONCAT(cs.class_date_," ",cs.end_class_time_))
+        FROM course_schedule cs
+        WHERE cs.music_group_id_ = #{practiceGroupId} AND cs.del_flag_ = 0 AND cs.group_type_ = #{groupType};
+    </select>
+    <select id="getFirstTime" resultType="java.util.Date">
+        SELECT MIN(CONCAT(cs.class_date_," ",cs.end_class_time_))
+        FROM course_schedule cs
+        WHERE cs.music_group_id_ = #{practiceGroupId} AND cs.del_flag_ = 0 AND cs.group_type_ = #{groupType};
+    </select>
 
 </mapper>

+ 40 - 12
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -45,6 +45,7 @@
         <result column="single_class_minutes_" property="singleClassMinutes"/>
         <result column="organ_id_" property="organId"/>
         <result column="courses_start_date_" property="coursesStartDate"/>
+        <result column="courses_start_dates_" property="coursesStartDates"/>
         <result column="courses_expire_date_" property="coursesExpireDate"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
@@ -73,6 +74,12 @@
             <if test="name!=null">
                 name_=#{name},
             </if>
+            <if test="coursesStartDate != null">
+                courses_start_date_=#{coursesStartDate},
+            </if>
+            <if test="coursesExpireDate != null">
+                courses_expire_date_ = #{coursesExpireDate},
+            </if>
             <if test="groupStatus!=null">
                 group_status_=#{groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
@@ -532,11 +539,16 @@
                 AND (su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT('%', #{search}, '%'))
             </if>
             AND su.id_ NOT IN (
-                SELECT student_id_ FROM practice_group WHERE type_='CHARGE'
+        SELECT DISTINCT pg.student_id_ FROM course_schedule_student_payment cssp LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.group_type_='PRACTICE' AND  pg.type_ = 'CHARGE'
             )
             AND NOT EXISTS (
-                SELECT user_id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=su.id_ AND cs.teach_mode_='ONLINE' AND CONCAT(cs.class_date_, ' ', cs.start_class_time_) > NOW()
+                SELECT user_id_ FROM course_schedule_student_payment cssp
+                LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_
+                WHERE cssp.user_id_=su.id_ AND cs.teach_mode_='ONLINE'
+                AND NOT EXISTS(SELECT student_id_ FROM practice_group WHERE cssp.music_group_id_=id_ AND cssp.group_type_='PRACTICE' AND type_!='TRIAL')
+                AND CONCAT(cs.class_date_, ' ', cs.start_class_time_) > NOW()
             )
+        ORDER BY su.id_
         <include refid="global.limit"/>
     </select>
     <select id="countConvertDefeatStudents" resultType="int">
@@ -557,10 +569,14 @@
                 AND (su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT('%', #{search}, '%'))
             </if>
             AND su.id_ NOT IN (
-                SELECT student_id_ FROM practice_group WHERE type_='CHARGE'
+                SELECT DISTINCT pg.student_id_ FROM course_schedule_student_payment cssp LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.group_type_='PRACTICE' AND  pg.type_ = 'CHARGE'
             )
             AND NOT EXISTS (
-                SELECT user_id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=su.id_ AND cs.teach_mode_='ONLINE' AND CONCAT(cs.class_date_, ' ', cs.start_class_time_) > NOW()
+                SELECT user_id_ FROM course_schedule_student_payment cssp
+                LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_
+                WHERE cssp.user_id_=su.id_ AND cs.teach_mode_='ONLINE'
+                AND NOT EXISTS(SELECT student_id_ FROM practice_group WHERE cssp.music_group_id_=id_ AND cssp.group_type_='PRACTICE' AND type_!='TRIAL')
+                AND CONCAT(cs.class_date_, ' ', cs.start_class_time_) > NOW()
             )
     </select>
     <select id="findEnableAssignTeachers" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
@@ -570,7 +586,17 @@
         WHERE
             FIND_IN_SET(#{subjectId}, t.subject_id_)
             AND (t.organ_id_ = #{studentOrganId} OR FIND_IN_SET(#{studentOrganId},t.flow_organ_range_))
-            AND NOT EXISTS (SELECT user_id_ FROM practice_group WHERE student_id_=#{studentId} AND t.id_=user_id_ AND type_='TRIAL')
+            AND NOT EXISTS (SELECT
+                cs.actual_teacher_id_
+            FROM
+                course_schedule_student_payment cssp
+                LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+		        LEFT JOIN practice_group pg ON cssp.music_group_id_=pg.id_
+            WHERE
+                cssp.user_id_ = #{studentId}
+                AND cs.actual_teacher_id_ = t.id_
+		        AND pg.type_='TRIAL'
+                AND cssp.group_type_ = 'PRACTICE')
     </select>
 
     <select id="findLastPracticeSubject" resultType="int">
@@ -585,8 +611,7 @@
             pg.name_,
             pg.user_id_,
             su.real_name_ teacher_name_,
-            MIN(CONCAT(cs.class_date_, ' ', cs.start_class_time_)) courses_start_date_,
-            MAX(CONCAT(cs.class_date_, ' ', cs.end_class_time_)) courses_expire_date_,
+            GROUP_CONCAT(CONCAT(cs.class_date_, ' ', cs.start_class_time_) ORDER BY CONCAT( cs.class_date_, ' ', cs.start_class_time_ )) courses_start_dates_,
             pg.memo_
         FROM
             practice_group pg
@@ -601,11 +626,13 @@
     </select>
     <select id="countStudentTrialPractices" resultType="int">
         SELECT
-            COUNT(pg.id_)
+            COUNT( DISTINCT pg.id_ )
         FROM
-            practice_group pg
+            course_schedule cs
+            LEFT JOIN practice_group pg ON pg.id_ = cs.music_group_id_
         WHERE
             pg.student_id_ = #{studentId}
+            AND cs.group_type_ = 'PRACTICE'
             AND pg.type_ = 'TRIAL'
     </select>
     <select id="findStudentAndTeacherTrialPractices" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleDao.CourseSchedule">
@@ -642,11 +669,12 @@
     </select>
 
     <select id="countStudentAndTeacherTrialPractices" resultType="int">
-        SELECT COUNT(id_)
-        FROM practice_group pg
+        SELECT COUNT(pg.id_)
+        FROM course_schedule cs
+            LEFT JOIN practice_group pg ON cs.music_group_id_=pg.id_
         WHERE
             pg.type_ = 'TRIAL'
-            AND pg.user_id_ = #{teacherId}
+            AND cs.actual_teacher_id_ = #{teacherId}
             AND pg.student_id_ = #{studentId}
     </select>
     <select id="checkStudentExitChargePractice" resultType="int">

+ 4 - 4
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -178,16 +178,16 @@
             <if test="courseEndDate != null">
                 AND cs.class_date_ &lt;= #{courseEndDate}
             </if>
-            <if test="signInStatus != null and signInStatus != 3">
+            <if test="signInStatus != null and signInStatus != '' and signInStatus != 3">
                 AND ta.sign_in_status_ = #{signInStatus}
             </if>
-            <if test="signOutStatus != null and signOutStatus != 3">
+            <if test="signOutStatus != null and signOutStatus != '' and signOutStatus != 3">
                 AND ta.sign_out_status_ = #{signOutStatus}
             </if>
-            <if test="signOutStatus != null and signOutStatus == 3">
+            <if test="signOutStatus != null and signOutStatus != '' and signOutStatus == 3">
                 AND ta.sign_out_status_ IS NULL
             </if>
-            <if test="signInStatus != null and signInStatus == 3">
+            <if test="signInStatus != null and signInStatus != '' and signInStatus == 3">
                 AND ta.sign_in_status_ IS NULL
             </if>
             <if test="courseScheduleType != null">

+ 10 - 4
mec-biz/src/main/resources/config/mybatis/TeacherCourseRewardDao.xml

@@ -135,18 +135,24 @@
 
     <sql id="queryCondition">
         <where>
-            <if test="teacherId!=null">
+            <if test="teacherId != null">
                 AND tcr.teacher_id_=#{teacherId}
             </if>
-            <if test="search!=null">
+            <if test="search != null and search != ''">
                 AND (tcr.course_group_name_ LIKE CONCAT('%', #{search}, '%') OR tcr.music_group_id_ LIKE CONCAT(#{search}, '%'))
             </if>
-            <if test="organId!=null">
+            <if test="organId != null and organId != ''">
                 AND FIND_IN_SET(tcr.organ_id_ ,#{organId})
             </if>
-            <if test="settlementStatus!=null">
+            <if test="settlementStatus != null and settlementStatus != ''">
                 AND tcr.settlement_status_ = #{settlementStatus}
             </if>
+            <if test="startTime != null">
+                AND tcr.settlement_date_ >= #{startTime}
+            </if>
+            <if test="endTime != null">
+                AND tcr.settlement_date_ &lt; #{endTime}
+            </if>
         </where>
     </sql>
 

+ 13 - 0
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -187,6 +187,19 @@ public class PracticeGroupController extends BaseController {
         return succeed(practiceGroupService.findUserLatestPracticeGroup(sysUser.getId(),groupId));
     }
 
+    @ApiOperation("检测学生是否是新用户")
+    @GetMapping(value = "/isNewStudent")
+    public HttpResponseResult isNewStudent(){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(sysUser.getId());
+        Map<String, Integer> result=new HashMap<>();
+        result.put("isNewStudent", studentExitChargePractices<=0?0:1);
+        return succeed(result);
+    }
+
     @ApiOperation("陪练课购买")
     @PostMapping(value = "/buyPracticeGroup")
     public HttpResponseResult buyPracticeGroup(@RequestBody PracticeGroupBuyDto practiceGroupBuyParams){

+ 53 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -80,6 +80,8 @@ public class ExportController extends BaseController {
     private StudentExtracurricularExercisesSituationService studentExtracurricularExercisesSituationService;
     @Autowired
     private TeacherSalaryComplaintsService teacherSalaryComplaintsService;
+    @Autowired
+    private TeacherCourseRewardService teacherCourseRewardService;
 
     @ApiOperation(value = "导出申述处理列表")
     @PostMapping("export/teacherSalaryComplaints")
@@ -235,6 +237,57 @@ public class ExportController extends BaseController {
         }
     }
 
+    @ApiOperation(value = "导出老师结转奖励")
+    @PostMapping("export/teacherCourseReward")
+    @PreAuthorize("@pcs.hasPermissions('export/teacherCourseReward')")
+    public void teacherCourseReward(HttpServletResponse response, TeacherCourseRewardQueryInfo queryInfo) throws IOException {
+        queryInfo.setRows(99999);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+                throw new BizException("用户所在分部异常");
+            } else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
+                    throw new BizException("非法请求");
+                }
+            }
+        }
+        Date endTime = queryInfo.getEndTime();
+        if(endTime != null){
+            queryInfo.setEndTime(DateUtil.addDays(endTime, 1));
+        }
+        List<TeacherCourseReward> rows = teacherCourseRewardService.queryPage(queryInfo).getRows();
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课程组编号", "课程组名称", "分部", "指导老师", "是否结转", "结转金额", "结转日期", "备注"}, new String[]{
+                    "musicGroupId", "courseGroupName", "organName", "teacherName", "settlementStatus.msg",
+                    "expectRewardAmount", "settlementDate", "memo"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
 
     @ApiOperation(value = "导出学员列表")
     @PostMapping("export/studentHasCourse")

+ 6 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TeacherCourseRewardController.java

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.page.TeacherCourseRewardQueryInfo;
 import com.ym.mec.biz.service.TeacherCourseRewardService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
@@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 
 @RequestMapping("teacherCourseReward")
@@ -55,6 +57,10 @@ public class TeacherCourseRewardController extends BaseController {
                 }
             }
         }
+        Date endTime = queryInfo.getEndTime();
+        if(endTime != null){
+            queryInfo.setEndTime(DateUtil.addDays(endTime, 1));
+        }
         return succeed(teacherCourseRewardService.queryPage(queryInfo));
     }
 }

+ 20 - 4
mec-web/src/main/java/com/ym/mec/web/controller/education/EduPracticeGroupController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller.education;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.PracticeGroupDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.PracticeGroupBuyDto;
 import com.ym.mec.biz.dal.entity.Employee;
@@ -22,10 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * @Author Joburgess
@@ -49,6 +47,8 @@ public class EduPracticeGroupController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
     @Autowired
+    private PracticeGroupDao practiceGroupDao;
+    @Autowired
     private TeacherCourseRewardService teacherCourseRewardService;
 
     List<Integer> excludeOrganIds=new ArrayList<>(Arrays.asList(new Integer[]{36}));
@@ -122,6 +122,22 @@ public class EduPracticeGroupController extends BaseController {
         return succeed(practiceGroupService.findUserLatestPracticeGroup(studentId,groupId));
     }
 
+    @ApiOperation("检测学生是否是新用户")
+    @GetMapping(value = "/isNewStudent")
+    public HttpResponseResult isNewStudent(Integer studentId){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if(Objects.isNull(studentId)){
+            throw new BizException("请指定学生");
+        }
+        int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(studentId);
+        Map<String, Integer> result=new HashMap<>();
+        result.put("isNewStudent", studentExitChargePractices<=0?0:1);
+        return succeed(result);
+    }
+
     @ApiOperation("陪练课购买")
     @PostMapping(value = "/buyPracticeGroup")
     public HttpResponseResult buyPracticeGroup(@RequestBody PracticeGroupBuyDto practiceGroupBuyParams){