Joburgess 5 년 전
부모
커밋
6d09859f1e

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

@@ -23,6 +23,28 @@ public class VipGroupApplyBaseInfoDto extends VipGroup {
     @ApiModelProperty(value = "预计招生人数",hidden = true)
     private Integer expectStudentNum;
 
+    @ApiModelProperty(value = "教师线上课课酬")
+    private BigDecimal onlineTeacherSalary;
+
+    @ApiModelProperty(value = "教师线下课课酬")
+    private BigDecimal offlineTeacherSalary;
+
+    public BigDecimal getOnlineTeacherSalary() {
+        return onlineTeacherSalary;
+    }
+
+    public void setOnlineTeacherSalary(BigDecimal onlineTeacherSalary) {
+        this.onlineTeacherSalary = onlineTeacherSalary;
+    }
+
+    public BigDecimal getOfflineTeacherSalary() {
+        return offlineTeacherSalary;
+    }
+
+    public void setOfflineTeacherSalary(BigDecimal offlineTeacherSalary) {
+        this.offlineTeacherSalary = offlineTeacherSalary;
+    }
+
     public Integer getAllCourseNum() {
         return allCourseNum;
     }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
@@ -96,6 +97,17 @@ public class VipGroup {
 	@ApiModelProperty(value = "是否已结算")
 	private YesOrNoEnum isSalary;
 
+	@ApiModelProperty(value = "赠送课类型")
+	private TeachModeEnum giveClassType;
+
+	public TeachModeEnum getGiveClassType() {
+		return giveClassType;
+	}
+
+	public void setGiveClassType(TeachModeEnum giveClassType) {
+		this.giveClassType = giveClassType;
+	}
+
 	public YesOrNoEnum getIsSalary() {
 		return isSalary;
 	}

+ 25 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -52,6 +52,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 	@Override
 	public TeacherAttendanceDto getCurrentCourseDetail(Long courseID) {
+		if(Objects.isNull(courseID)){
+			throw new BizException("参数错误!");
+		}
 		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(courseID);
 		currentCourseDetail.setCurrentTime(new Date());
 		currentCourseDetail.setTeacherAttendanceTimeGap(ParamEnum.TEACHER_ATTENDANCE_TIME_GAP);
@@ -60,6 +63,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 	@Override
 	public void batchAddCourseSchedule(List<CourseSchedule> courseSchedules) {
+		if(Objects.isNull(courseSchedules)&&courseSchedules.size()<=0){
+			throw new BizException("参数错误!");
+		}
 		checkCourseSchedule(courseSchedules);
         createCourseScheduleName(courseSchedules);
 		courseScheduleDao.batchAddCourseSchedules(courseSchedules);
@@ -67,6 +73,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 	@Override
 	public void batchUpdateCourseSchedule(List<CourseSchedule> courseSchedules, Long musicGroupID) {
+		if(Objects.isNull(courseSchedules)&&courseSchedules.size()<=0){
+			throw new BizException("请选择需要调整的课程!");
+		}
+		if(Objects.isNull(musicGroupID)){
+			throw new BizException("请指定乐团!");
+		}
 		checkCourseSchedule(courseSchedules);
         courseScheduleDao.deleteCourseSchedulesByMusicGroupID(musicGroupID);
         courseScheduleDao.batchAddCourseSchedules(courseSchedules);
@@ -74,30 +86,42 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 	@Override
 	public List<CourseScheduleDto> getCourseSchedulesWithDate(Date classDate) {
+		if(Objects.isNull(classDate)){
+			throw new BizException("请选择日期!");
+		}
 		return courseScheduleDao.getCourseSchedulesWithDate(classDate);
 	}
 
 	@Override
 	public List<Date> getCourseScheduleDateByMonth(Long musicGroupID, Date month) {
+		if(Objects.isNull(month)||Objects.isNull(musicGroupID)){
+			throw new BizException("请选择日期并指定乐团!");
+		}
 		return courseScheduleDao.getCourseScheduleDateByMonth(musicGroupID,month);
 	}
 
 	@Override
 	public List<Date> getCourseScheduleDateByStudent(Date month, Integer isAttend) {
 		SysUser user = sysUserFeignService.queryUserInfo();
+		if(null==user){
+			throw new BizException("请登录");
+		}
 		return courseScheduleDao.getStudentCourseScheduleDate(user.getId().longValue(),month,isAttend);
 	}
 
 	@Override
 	public List<Date> getCourseScheduleDateByTeacher(Date month) {
 		SysUser user = sysUserFeignService.queryUserInfo();
+		if(null==user){
+			throw new BizException("请登录");
+		}
 		return courseScheduleDao.getTeacherCourseScheduleDate(user.getId().longValue(),month);
 	}
 
 	@Override
 	public Map getStudentCourseSchedulesWithDate(Date classDate) {
 		if(Objects.isNull(classDate)){
-			throw new BizException("参数错误!");
+			throw new BizException("请选择上课日期!");
 		}
 
 		SysUser user = sysUserFeignService.queryUserInfo();

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java

@@ -6,11 +6,13 @@ import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.entity.VipGroupActivity;
 import com.ym.mec.biz.service.VipGroupActivityService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Objects;
 
 @Service
 public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGroupActivity>  implements VipGroupActivityService {
@@ -25,18 +27,30 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 
 	@Override
 	public void addVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto) {
+		if(Objects.isNull(vipGroupActivityAddDto.getOrganId())){
+			throw new BizException("请指定部门!");
+		}
 		vipGroupActivityAddDto.setSalarySettlementJson(JSON.toJSONString(vipGroupActivityAddDto.getVipGroupSalarySettlement()));
 		super.insert(vipGroupActivityAddDto);
 	}
 
 	@Override
 	public void updateVipGroupActivity(VipGroupActivityAddDto vipGroupActivityAddDto) {
+		if(Objects.isNull(vipGroupActivityAddDto.getId())){
+			throw new BizException("请指定活动编号!");
+		}
+		if(Objects.isNull(vipGroupActivityAddDto.getOrganId())){
+			throw new BizException("请指定部门!");
+		}
 		vipGroupActivityAddDto.setSalarySettlementJson(JSON.toJSONString(vipGroupActivityAddDto.getVipGroupSalarySettlement()));
 		super.update(vipGroupActivityAddDto);
 	}
 
 	@Override
 	public List<VipGroupActivity> findByVipGroupCategory(Long categoryId) {
+		if(Objects.isNull(categoryId)){
+			throw new BizException("请选择课程形态!");
+		}
 		return vipGroupActivityDao.findByCategory(categoryId);
 	}
 }

+ 60 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -24,10 +24,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -73,6 +70,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	@Override
 	public void createVipGroup(VipGroupApplyDto vipGroup) {
 
+		if (Objects.isNull(vipGroup.getVipGroupApplyBaseInfo().getUserId())){
+			throw new BizException("请选择指导老师");
+		}
+
 	    if(vipGroup.getCourseSchedules().size()!=vipGroup.getVipGroupApplyBaseInfo().getAllCourseNum()){
 	        throw new BizException("课时总数不匹配!");
         }
@@ -85,10 +86,20 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             throw new BizException("线上课课时数量安排有误!");
         }
 
+        //获取活动信息
         VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue());
+
+        //生成vip课信息
 		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
+		vipGroupApplyBaseInfoDto.setTotalPrice(countVipGroupPredictFee(vipGroupApplyBaseInfoDto,
+				vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
+				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice()));
 		vipGroupDao.insert(vipGroupApplyBaseInfoDto);
+
+		//获取vip课类型信息
 		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId().intValue());
+
+		//创建班级信息
 		ClassGroup classGroup=new ClassGroup();
 		classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum());
 		classGroup.setName(vipGroupApplyBaseInfoDto.getName());
@@ -96,15 +107,27 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		classGroup.setType(ClassGroupTypeEnum.VIP);
 		classGroup.setDelFlag(YesOrNoEnum.NO);
 		classGroupDao.insert(classGroup);
+
+		//创建vip课班级关联记录
 		VipGroupClassGroupMapper vipGroupClassGroupMapper=new VipGroupClassGroupMapper();
 		vipGroupClassGroupMapper.setVipGroupId(vipGroupApplyBaseInfoDto.getId());
 		vipGroupClassGroupMapper.setClassGroupId(classGroup.getId());
 		vipGroupClassGroupMapperDao.insert(vipGroupClassGroupMapper);
+
+		//创建班级老师关联记录
 		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
 		classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.TEACHING);
 		classGroupTeacherMapper.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString()));
-		classGroupTeacherMapper.setSalary(vipGroupApplyBaseInfoDto.getSalary());
 		classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
+
+		//创建班级与老师课酬记录
+		ClassGroupTeacherSalary classGroupTeacherSalary=new ClassGroupTeacherSalary();
+		classGroupTeacherSalary.setTeacherRole(TeachTypeEnum.TEACHING);
+		classGroupTeacherSalary.setUserId(Integer.parseInt(vipGroupApplyBaseInfoDto.getTeacherId().toString()));
+		classGroupTeacherSalary.setSalary(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary());
+
+
+		//课程信息调整
 		vipGroup.getCourseSchedules().forEach(courseSchedule -> {
 		    if(courseSchedule.getEndClassTime().after(vipGroupActivity.getCoursesEndTime())
                 &&courseSchedule.getStartClassTime().before(vipGroupActivity.getCoursesStartTime())){
@@ -113,6 +136,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			courseSchedule.setClassGroupId(classGroup.getId());
 		});
 		courseScheduleService.batchAddCourseSchedule(vipGroup.getCourseSchedules());
+
+		//创建老师与学生费用相关记录
+		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries=new ArrayList<>();
+		Map<TeachModeEnum, List<CourseSchedule>> courseScheduleGroupByTeachMode = vipGroup.getCourseSchedules().stream().collect(Collectors.groupingBy(CourseSchedule::getTeachMode));
+		vipGroup.getCourseSchedules().forEach(courseSchedule -> {
+			CourseScheduleTeacherSalary courseScheduleTeacherSalary=new CourseScheduleTeacherSalary();
+		});
 	}
 
 	@Override
@@ -329,11 +359,31 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
      * 计算VIP课程预计收费
      */
     private BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){
-        BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
-        BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
-        BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
-        BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
-        return onlineVipGroupCharge.add(offlineVipGroupCharge);
+		VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
+		if(Objects.isNull(vipGroup)){
+			throw new BizException("该课未指定活动方案");
+		}
+		BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
+		BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
+		BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
+		BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
+		BigDecimal totalPrice=null;
+		switch (vipGroupActivity.getType()){
+			case BASE_ACTIVITY:
+				totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge);
+				break;
+			case DISCOUNT:
+				BigDecimal discount=new BigDecimal(vipGroupActivity.getAttribute1());
+				totalPrice=onlineVipGroupCharge.add(offlineVipGroupCharge);
+				totalPrice=totalPrice.multiply(discount);
+				break;
+			case GIVE_CLASS:
+
+				break;
+			default:
+				throw new BizException("活动类型错误!");
+		}
+        return totalPrice;
     }
 
 	@Override

+ 7 - 5
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -30,6 +30,7 @@
         <result column="total_class_times_" property="totalClassTimes"/>
         <result column="current_class_times_" property="currentClassTimes"/>
         <result column="is_salary_" property="isSalary"/>
+        <result column="give_class_type_" property="giveClassType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
     <resultMap id="studentManageVipGroup" type="com.ym.mec.biz.dal.dto.StudentManageVipGroupDto" extends="VipGroup">
@@ -134,8 +135,8 @@
         </selectKey>
         -->
         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_)
-        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_})
+        (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_class_type_)
+        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_},#{giveClassType})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -193,8 +194,8 @@
             <if test="totalPrice != null">
                 total_price_ = #{totalPrice},
             </if>
-            <if test="isSalary!=null">
-                is_salary_=#{isSalary}
+            <if test="giveClassType!=null">
+                give_class_type_=#{giveClassType}
             </if>
         </set>
         WHERE id_ = #{id}
@@ -419,10 +420,11 @@
             CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
             cs.status_,
             cs.teach_mode_,
-            cs.is_salary_
+            csts.actual_salary_ IS NOT NULL is_salary_
         FROM
             vip_group_class_group_mapper vgcgm
             LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
+            LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
         <include refid="teachingRecordQueryCondition"/>
         ORDER BY cs.id_
         <include refid="global.limit"/>

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

@@ -4,11 +4,14 @@ import com.ym.mec.biz.dal.dto.VipGroupActivityAddDto;
 import com.ym.mec.biz.dal.page.VipGroupActivityQueryInfo;
 import com.ym.mec.biz.service.VipGroupActivityService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Objects;
+
 /**
  * @Author Joburgess
  * @Date 2019/10/1
@@ -45,6 +48,9 @@ public class VipGroupActivityController extends BaseController {
     @ApiOperation(value = "删除活动方案")
     @PostMapping("/delete")
     public Object delete(Long id){
+        if(Objects.isNull(id)){
+            throw new BizException("请指定活动编号!");
+        }
         vipGroupActivityService.delete(id.intValue());
         return succeed();
     }