瀏覽代碼

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan 5 年之前
父節點
當前提交
52fe1dba86

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.VipGroup;
 import com.ym.mec.common.dal.BaseDAO;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -157,4 +158,12 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
      */
     List<Map<String,Integer>> countSurplusClassTimes(Long vipGroupId);
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/12
+     * @params [vipGroupId]
+     * @return java.math.BigDecimal
+     * @describe 统计学生vip课未上课时费用
+     */
+    List<Map<Long,BigDecimal>> countSurplusCourseFee(Long vipGroupId);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupApplyBaseInfoDto.java

@@ -11,6 +11,9 @@ import java.math.BigDecimal;
  */
 public class VipGroupApplyBaseInfoDto extends VipGroup {
 
+    @ApiModelProperty(value = "科目编号列表")
+    private String subjectIdList;
+
     @ApiModelProperty(value = "课时总数")
     private Integer allCourseNum;
 
@@ -29,6 +32,14 @@ public class VipGroupApplyBaseInfoDto extends VipGroup {
     @ApiModelProperty(value = "教师线下课课酬")
     private BigDecimal offlineTeacherSalary;
 
+    public String getSubjectIdList() {
+        return subjectIdList;
+    }
+
+    public void setSubjectIdList(String subjectIdList) {
+        this.subjectIdList = subjectIdList;
+    }
+
     public BigDecimal getOnlineTeacherSalary() {
         return onlineTeacherSalary;
     }

+ 10 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -83,7 +83,7 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @return java.math.BigDecimal
      * @describe 计算课程购买总价
      */
-    BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice);
+    Map countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice);
 
     /**
      * @Author: Joburgess
@@ -166,4 +166,13 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      */
     List<String> findVipGroupAttendanceStudents(Long courseScheduleId);
 
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/12
+     * @params [vipGroupId]
+     * @return void
+     * @describe 停止vip课
+     */
+    void stopGroup(Long vipGroupId);
+
 }

+ 131 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -23,6 +23,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -89,15 +90,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("请选择指导老师");
 		}
 
-	    if(vipGroup.getCourseSchedules().size()!=vipGroup.getVipGroupApplyBaseInfo().getAllCourseNum()){
+	    if(vipGroup.getCourseSchedules().size()!=(vipGroup.getVipGroupApplyBaseInfo().getOfflineClassesNum()+vipGroup.getVipGroupApplyBaseInfo().getOnlineClassesNum())){
 	        throw new BizException("课时总数不匹配!");
         }
 
         Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroup = vipGroup.getCourseSchedules().stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
-	    if(courseScheduleGroup.get(TeachModeEnum.OFFLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOfflineClassesNum()){
+
+	    if((Objects.isNull(courseScheduleGroup.get(TeachModeEnum.OFFLINE))&&vipGroup.getVipGroupApplyBaseInfo().getOfflineClassesNum()!=0)
+				||(!Objects.isNull(courseScheduleGroup.get(TeachModeEnum.OFFLINE))&&(courseScheduleGroup.get(TeachModeEnum.OFFLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOfflineClassesNum()))){
 	        throw new BizException("线下课课时数量安排有误!");
         }
-        if(courseScheduleGroup.get(TeachModeEnum.ONLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOnlineClassesNum()){
+        if((Objects.isNull(courseScheduleGroup.get(TeachModeEnum.ONLINE))&&vipGroup.getVipGroupApplyBaseInfo().getOnlineClassesNum()!=0)
+				||(!Objects.isNull(courseScheduleGroup.get(TeachModeEnum.ONLINE))&&(courseScheduleGroup.get(TeachModeEnum.ONLINE).size()<vipGroup.getVipGroupApplyBaseInfo().getOnlineClassesNum()))){
             throw new BizException("线上课课时数量安排有误!");
         }
 
@@ -107,9 +111,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		
 		//生成vip课信息
 		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
+		List<String> bySubIds = subjectDao.findBySubIds(vipGroupApplyBaseInfoDto.getSubjectIdList());
+		StringBuffer className=new StringBuffer(StringUtils.join(bySubIds,","));
+		className.append("•");
+		className.append(vipGroupApplyBaseInfoDto.getName());
+		vipGroupApplyBaseInfoDto.setName(className.toString());
 		vipGroupApplyBaseInfoDto.setTotalPrice(countVipGroupPredictFee(vipGroupApplyBaseInfoDto,
 				vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
-				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice()));
+				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice()).get("totalPrice"));
 		vipGroupDao.insert(vipGroupApplyBaseInfoDto);
 
 		//获取vip课类型信息
@@ -117,9 +126,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		//创建班级信息
 		ClassGroup classGroup=new ClassGroup();
+		classGroup.setSubjectIdList(vipGroupApplyBaseInfoDto.getSubjectIdList());
 		classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum());
 		classGroup.setName(vipGroupApplyBaseInfoDto.getName());
 		classGroup.setExpectStudentNum(vipGroupApplyBaseInfoDto.getExpectStudentNum());
+		classGroup.setTotalClassTimes(vipGroupApplyBaseInfoDto.getOnlineClassesNum()+vipGroupApplyBaseInfoDto.getOfflineClassesNum());
 		classGroup.setType(ClassGroupTypeEnum.VIP);
 		classGroup.setDelFlag(YesOrNoEnum.NO);
 		classGroupDao.insert(classGroup);
@@ -139,13 +150,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		//创建班级老师关联记录
 		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
 		classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
-		classGroupTeacherMapper.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString()));
+		classGroupTeacherMapper.setUserId(vipGroupApplyBaseInfoDto.getUserId());
 		classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
 
 		//创建班级与老师课酬记录
 		ClassGroupTeacherSalary classGroupTeacherSalary=new ClassGroupTeacherSalary();
 		classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
-		classGroupTeacherSalary.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString()));
+		classGroupTeacherSalary.setUserId(vipGroupApplyBaseInfoDto.getUserId());
 		classGroupTeacherSalary.setSalary(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary());
 		classGroupTeacherSalary.setOnlineClassesSalary(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary());
 		classGroupTeacherSalaryDao.insert(classGroupTeacherSalary);
@@ -156,6 +167,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                 &&courseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){
 		        throw new BizException("课时安排时间超出范围!");
             }
+		    courseSchedule.setType(CourseSchedule.CourseScheduleType.VIP);
 			courseSchedule.setClassGroupId(classGroup.getId());
 		});
 		courseScheduleService.batchAddCourseSchedule(vipGroup.getCourseSchedules());
@@ -413,6 +425,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 	@Override
 	public StudentVipGroupDetailDto getVipGroupShowDetail(Long vipGroupId) {
+		if(Objects.isNull(vipGroupId)){
+			throw new BizException("请指定vip课程");
+		}
 		return vipGroupDao.getVipGroupDetail(vipGroupId);
 	}
 
@@ -475,7 +490,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         String orderNo=StringUtils.join(new String[]{user.getId().toString(),String.valueOf(System.currentTimeMillis())});
         studentPaymentOrder.setOrderNo(orderNo);
         studentPaymentOrder.setType(OrderTypeEnum.SMALL_CLASS_TO_BUY);
-        studentPaymentOrder.setExpectAmount(countVipGroupPredictFee(vipGroup,vipGroup.getOnlineClassesUnitPrice(),vipGroup.getOfflineClassesUnitPrice()));
+        studentPaymentOrder.setExpectAmount(countVipGroupPredictFee(vipGroup,vipGroup.getOnlineClassesUnitPrice(),vipGroup.getOfflineClassesUnitPrice()).get("totalPrice"));
         if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.DISCOUNT){
             studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().multiply(new BigDecimal(vipGroupActivity.getAttribute1())));
         }else{
@@ -511,15 +526,67 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
      * 计算VIP课程预计收费
      */
     @Override
-    public BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){
+    public Map<String,BigDecimal> countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){
+		if(Objects.isNull(vipGroup.getUserId())){
+			throw new BizException("请指定教师");
+		}
+
+		if(Objects.isNull(vipGroup.getVipGroupCategoryId())){
+			throw new BizException("请指定课程形式");
+		}
+
+    	TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroup.getUserId().longValue(),
+				vipGroup.getVipGroupCategoryId());
+
+		if(Objects.isNull(teacherDefaultVipGroupSalary)){
+			throw new BizException("课程形式不存在");
+		}
+
 		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
-		if(Objects.isNull(vipGroup)){
-			throw new BizException("该课未指定活动方案");
+
+		if(Objects.isNull(vipGroupActivity)){
+			throw new BizException("指定的活动方案不存在");
 		}
+
+		VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
+
+		Map<String,BigDecimal> results=new HashMap<>(1);
+
 		BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
 		BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
 		BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
 		BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
+
+		//教师课酬线上单课酬计算
+		switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
+			case TEACHER_DEFAULT:
+				results.put("onlineTeacherSalary",teacherDefaultVipGroupSalary.getOfflineClassesSalary());
+				break;
+			case RATIO_DISCOUNT:
+				results.put("onlineTeacherSalary",onlineClassesUnitPrice.multiply((vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue())));
+				break;
+			case FIXED_SALARY:
+				results.put("onlineTeacherSalary",vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue());
+				break;
+			default:
+				throw new BizException("未指定课酬结算标准!");
+		}
+		//教师线下单课酬计算
+		switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
+			case TEACHER_DEFAULT:
+				results.put("offlineTeacherSalary",teacherDefaultVipGroupSalary.getOfflineClassesSalary());
+				break;
+			case RATIO_DISCOUNT:
+				results.put("offlineTeacherSalary",offlineClassesUnitPrice.multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()));
+				break;
+			case FIXED_SALARY:
+				results.put("offlineTeacherSalary",vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue());
+				break;
+			default:
+				throw new BizException("未指定课酬结算标准!");
+		}
+
+		//课程购买费用计算
 		BigDecimal totalPrice;
 		switch (vipGroupActivity.getType()){
 			case BASE_ACTIVITY:
@@ -536,18 +603,21 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 						offlineClassNum=offlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
 					}
 					offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
-				}else{
+				}else if(vipGroup.getGiveTeachMode()==TeachModeEnum.ONLINE){
 					if(onlineClassNum.compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
 						onlineClassNum=onlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
 					}
 					onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
+				}else{
+					throw new BizException("请指定赠送课程类型!");
 				}
 				totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge);
 				break;
 			default:
 				throw new BizException("活动类型错误!");
 		}
-        return totalPrice;
+		results.put("totalPrice",totalPrice);
+        return results;
     }
 
 	@Override
@@ -573,7 +643,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		Map surplusClassTimes=MapUtil.convertMybatisMap(vipGroupDao.countSurplusClassTimes(vipGroupId));
 		studentApplyRefunds.setExpectAmount(countVipGroupPredictFee(vipGroup,
 				new BigDecimal(surplusClassTimes.get(TeachModeEnum.ONLINE.getCode()).toString()),
-				new BigDecimal(surplusClassTimes.get(TeachModeEnum.OFFLINE.getCode()).toString())));
+				new BigDecimal(surplusClassTimes.get(TeachModeEnum.OFFLINE.getCode()).toString())).get("totalPrice"));
 		studentApplyRefunds.setStatus(AuditStatusEnum.ING);
 		String orderNo=StringUtils.join(new String[]{studentId.toString(),String.valueOf(System.currentTimeMillis())});
 		studentApplyRefunds.setOrderNo(orderNo);
@@ -585,6 +655,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void applyRefundAudit(StudentApplyRefunds studentApplyRefunds) {
+    	if(Objects.isNull(studentApplyRefunds.getId())){
+    		throw new BizException("请指定退费订单!");
+		}
 		StudentApplyRefunds oldStudentApplyRefunds=studentApplyRefundsDao.get(studentApplyRefunds.getId());
 		oldStudentApplyRefunds.setStatus(studentApplyRefunds.getStatus());
 		if(null==studentApplyRefunds.getActualAmount()){
@@ -676,4 +749,49 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 		return courseScheduleDao.findStudentNamesByCourseSchedule(courseScheduleId);
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void stopGroup(Long vipGroupId) {
+    	if(Objects.isNull(vipGroupId)){
+    		throw new BizException("请指定vip课");
+		}
+		VipGroup vipGroup = vipGroupDao.get(vipGroupId);
+    	if(Objects.isNull(vipGroup)){
+    		throw new BizException("该课程不存在");
+		}
+    	if(vipGroup.getStatus()==VipGroupStatusEnum.FINISH||vipGroup.getStatus()==VipGroupStatusEnum.CANCEL){
+    		throw new BizException("该课程已结束或者已被停止,无法进行此操作");
+		}
+    	if(vipGroup.getStatus()==VipGroupStatusEnum.NOT_START){
+			vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
+    		vipGroupDao.update(vipGroup);
+    		return;
+		}
+		List<Map<Long, BigDecimal>> maps = vipGroupDao.countSurplusCourseFee(vipGroupId);
+    	if(CollectionUtils.isEmpty(maps)){
+			vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
+			vipGroupDao.update(vipGroup);
+			return;
+		}
+		Map<Long, BigDecimal> studentSurplusClassFees = MapUtil.convertMybatisMap(maps);
+    	for(Long userId:studentSurplusClassFees.keySet()){
+			StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroupId,userId);
+			if(null==studentPaymentOrder){
+				throw new BizException("未找到相关订单信息!");
+			}
+			sysUserCashAccountService.updateBalance(userId.intValue(),studentSurplusClassFees.get(userId));
+			SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(userId.intValue());
+			SysUserCashAccountDetail sysUserCashAccountDetail=new SysUserCashAccountDetail();
+			sysUserCashAccountDetail.setUserId(userId.intValue());
+			sysUserCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS);
+			sysUserCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+			sysUserCashAccountDetail.setAmount(studentSurplusClassFees.get(userId));
+			sysUserCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
+			sysUserCashAccountDetail.setAttribute(studentPaymentOrder.getOrderNo());
+			sysUserCashAccountDetailDao.insert(sysUserCashAccountDetail);
+		}
+		vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
+		vipGroupDao.update(vipGroup);
+	}
 }

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

@@ -73,10 +73,10 @@
 
     <insert id="batchAddCourseSchedules" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
         INSERT INTO course_schedule
-        (class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,type_,name_)
+        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,type_,name_)
         VALUE
         <foreach collection="list" item="course" separator=",">
-            (#{course.classGroupId},#{course.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.subsidy},#{course.classDate},#{course.startClassTime},#{course.endClassTime},#{course.teacherId},#{course.actualTeacherId},now(),now(),#{course.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.name})
+            (#{course.id},#{course.classGroupId},#{course.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.subsidy},#{course.classDate},#{course.startClassTime},#{course.endClassTime},#{course.teacherId},#{course.actualTeacherId},now(),now(),#{course.type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.name})
         </foreach>
     </insert>
 

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml

@@ -156,7 +156,7 @@ create_time_ = #{createTime},
 				AND FIND_IN_SET(dg.subject_id_,#{subjectIds})
 			</if>
 			<if test="startTime!=null and endTime==null">
-				AND dgcp.start_time_=#{startTime}
+				AND CONCAT(dgcp.course_date_,' ',dgcp.start_time_)=#{startTime}
 			</if>
 			<if test="startTime!=null and endTime!=null">
 				AND (CONCAT(dgcp.course_date_,' ',dgcp.start_time_) BETWEEN #{startTime} AND #{endTime})

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/EmployeeMapper.xml

@@ -132,7 +132,7 @@
 		UPDATE sys_user SET lock_flag_ = IF(lock_flag_=0,1,0) WHERE id_=#{userID}
 	</update>
     <update id="updateUserDemissionDate">
-        UPDATE employee SET demission_date_ = IF(demission_date_ IS NULL,demission_date_,now()) WHERE user_id_=#{userID}
+        UPDATE employee SET demission_date_ = IF(demission_date_ IS NULL,now(),NULL) WHERE user_id_=#{userID}
     </update>
 
     <!-- 根据主键删除一条记录 -->

+ 19 - 6
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -54,8 +54,8 @@
     </resultMap>
 
     <resultMap type="com.ym.mec.biz.dal.dto.StudentVipGroupShowListDto" id="studentVipGroup">
-        <result column="vip_group_id_" property="vipGroupId"/>
-        <result column="vip_group_name_" property="vipGroupName"/>
+        <result column="id_" property="vipGroupId"/>
+        <result column="name_" property="vipGroupName"/>
         <result column="single_class_minutes_" property="singleClassMinutes"/>
         <result column="payment_expire_date_" property="paymentExpireDate"/>
         <result column="online_classes_num_" property="onlineClassesNum"/>
@@ -141,7 +141,7 @@
         -->
         INSERT INTO vip_group
         (id_,user_id_,single_class_minutes_,payment_expire_date_,courses_expire_date_,create_time_,update_time_,teacher_school_id_,online_classes_num_,offline_classes_num_,registration_start_time_,organ_id_list_,vip_group_activity_id_,status_,online_classes_unit_price_,offline_classes_unit_price_,total_price_,give_teach_mode_)
-        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offline_classes_unit_price_},#{total_price_},#{giveTeachMode})
+        VALUES(#{id},#{userId},#{singleClassMinutes},#{paymentExpireDate},#{coursesExpireDate},now(),now(),#{teacherSchoolId},#{onlineClassesNum},#{offlineClassesNum},#{registrationStartTime},#{organIdList},#{vipGroupActivityId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{onlineClassesUnitPrice},#{offlineClassesUnitPrice},#{totalPrice},#{giveTeachMode})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -238,8 +238,8 @@
 
     <select id="findVipGroups" resultMap="studentVipGroup">
        SELECT
-            vg.id_ vip_group_id_,
-            vg.name_ vip_group_name_,
+            vg.id_,
+            vg.name_,
             vg.single_class_minutes_,
             vg.payment_expire_date_,
             vg.courses_expire_date_,
@@ -419,7 +419,7 @@
                 AND (cs.class_date_ BETWEEN #{startTime} AND #{endTime})
             </if>
             <if test="teachMode!=null and teachMode!=''">
-                AND cs.teach_mode_=#{teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+                AND cs.teach_mode_=#{teachMode}
             </if>
             <if test="status!=null and status!=''">
                 AND cs.status_=#{status}
@@ -501,4 +501,17 @@
             LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
         WHERE vg.id_=#{vipGroupId} AND cs.id_!=NULL AND csts.settlement_time_!=NULL AND csts.actual_salary_&lt;csts.expect_salary_
     </select>
+
+    <select id="countSurplusCourseFee" resultType="java.math.BigDecimal">
+        SELECT
+            cssp.user_id_ as 'key',
+            SUM(cssp.expect_price_) as 'value'
+        FROM
+            vip_group vg
+            LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_ = vgcgm.vip_group_id_
+            LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
+            LEFT JOIN course_schedule_student_payment cssp ON cs.id_=cssp.course_schedule_id_
+            WHERE vg.id_=#{vipGroupId} AND cs.status_!='OVER'
+        GROUP BY cssp.user_id_
+    </select>
 </mapper>

+ 0 - 2
mec-eureka/src/main/resources/application.yml

@@ -4,8 +4,6 @@ server:
     contextPath: /eureka
 
 eureka:
-  instance:
-    lease-renewal-interval-in-seconds: 1
   client:
     registerWithEureka: false
     fetchRegistry: false

+ 4 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentDemoGroupController.java

@@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @Author Joburgess
@@ -38,6 +39,9 @@ public class StudentDemoGroupController extends BaseController {
     @ApiOperation(value = "试听课列表获取")
     @PostMapping("/queryStudentDemoGroups")
     public Object queryStudentDemoGroups(@RequestBody StudentDemoGroupQueryInfo queryInfo){
+        if(Objects.isNull(queryInfo.getSubjectIds())||Objects.isNull(queryInfo.getStartTime())){
+            return failed("参数错误!");
+        }
         return succeed(demoGroupService.queryStudentDemoGroups(queryInfo));
     }
 

+ 5 - 3
mec-util/src/main/java/com/ym/mec/util/collection/MapUtil.java

@@ -100,10 +100,12 @@ public class MapUtil {
 
 	/**
 	 * @Author: Joburgess
-	 * @Date: 2019/10/3
-	 * mybatis返回结果转换为Map
+	 * @Date: 2019/10/12
+	 * @params [maps]
+	 * @return java.util.Map
+	 * @describe mybatis返回结果转换为Map
 	 */
-	public static Map convertMybatisMap(List<Map<String,Integer>> maps){
+	public static <T,K> Map convertMybatisMap(List<Map<T,K>> maps){
 		Map result=new HashMap();
 		maps.forEach(stringIntegerMap -> {
 			result.put(stringIntegerMap.get("key"),stringIntegerMap.get("value"));

+ 115 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java

@@ -0,0 +1,115 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.page.TeacherQueryInfo;
+import com.ym.mec.biz.dal.page.VipClassQueryInfo;
+import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.TeacherService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+@RequestMapping("teacher")
+@Api(tags = "教师服务")
+@RestController
+public class TeacherController extends BaseController {
+
+    @Autowired
+    private TeacherService teacherService;
+
+    @Autowired
+    private ClassGroupService classGroupService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "新增教师")
+    @PostMapping("/add")
+    public Object add(Teacher teacher) {
+        try {
+            teacherService.add(teacher);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return failed(e.getMessage());
+        }
+        return succeed();
+    }
+
+    @ApiOperation(value = "修改教师")
+    @PostMapping("/update")
+    public Object update(Teacher teacher) {
+        teacher.setUpdateTime(new Date());
+        teacherService.updateTea(teacher);
+        return succeed();
+    }
+
+    /*@ApiOperation(value = "删除教师")
+    @PostMapping("/delete")
+    public Object update(Long userId) {
+        teacherService.deleteTeacher(userId);
+        return succeed();
+    }*/
+
+    @ApiOperation(value = "根据教师编号查询教师基本信息")
+    @GetMapping("/get")
+    @ApiParam(value = "教师编号", required = true)
+    public Object get(Integer id) {
+        return succeed(teacherService.getDetail(id));
+    }
+
+    @ApiOperation(value = "分页查询教师列表")
+    @GetMapping("/queryPage")
+    public Object queryPage(TeacherQueryInfo queryInfo) {
+        return succeed(teacherService.queryPageDetail(queryInfo));
+    }
+
+    @ApiOperation(value = "根据教师编号查询教师课程班列表")
+    @GetMapping("/getClass")
+    @ApiParam(value = "教师编号", required = true)
+    public Object getClassGroup(Integer id) {
+        return succeed(classGroupService.findClassGroup4Teacher(id));
+    }
+
+    @ApiOperation(value = "获取老师乐团课程信息列表")
+    @GetMapping("/getTeacherMusicClass")
+    @ApiParam(value = "教师编号", required = true)
+    public Object getTeacherMusicClass(Integer teacherId){
+        return succeed(classGroupService.getTeacherMusicClass(teacherId));
+    }
+
+    @ApiOperation(value = "获取老师VIP课程信息列表")
+    @GetMapping("/getTeacherVipClass")
+    public Object getTeacherVipClass(VipClassQueryInfo queryInfo){
+        return succeed(classGroupService.getTeacherVipClass(queryInfo));
+    }
+
+    @ApiOperation(value = "获取教师所有聊天群组")
+    @GetMapping("/queryTeacherGroups")
+    public Object queryTeacherGroups(String search){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed("获取用户信息失败");
+        }
+        return succeed(teacherService.queryTeacherGroups(sysUser.getId(),search));
+    }
+
+    @ApiOperation(value = "获取和当前教师相关的所有学员聊天列表")
+    @GetMapping("/queryGroupStudents")
+    public Object queryGroupStudents(String search){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            return failed("获取用户信息失败");
+        }
+        return succeed(teacherService.queryGroupStudents(sysUser.getId(),search));
+    }
+
+}

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

@@ -17,8 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
-import java.math.BigDecimal;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
@@ -96,9 +94,7 @@ public class VipGroupManageController extends BaseController {
     @ApiOperation("课酬总费用")
     @PostMapping("/getVipGroupCostCount")
     public Object getVipGroupCostCount(VipGroup vipGroup){
-        BigDecimal bigDecimal = vipGroupService.countVipGroupPredictFee(vipGroup, vipGroup.getOnlineClassesUnitPrice(), vipGroup.getOfflineClassesUnitPrice());
-        Map<String,BigDecimal> results=new HashMap<>(1);
-        results.put("totalPrice",bigDecimal);
+        Map results = vipGroupService.countVipGroupPredictFee(vipGroup, vipGroup.getOnlineClassesUnitPrice(), vipGroup.getOfflineClassesUnitPrice());
         return succeed(results);
     }
 
@@ -108,9 +104,7 @@ public class VipGroupManageController extends BaseController {
         if(Objects.isNull(vipGroupId)){
             return failed(HttpStatus.FORBIDDEN,"请指定vip课");
         }
-
-        //停止vip课逻辑
-
+        vipGroupService.stopGroup(vipGroupId);
         return succeed();
     }