Преглед на файлове

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

yonge преди 5 години
родител
ревизия
36897a14b5

+ 1 - 1
mec-auth/mec-auth-server/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.96.85.100:8848
+spring.cloud.nacos.config.server-addr=47.99.212.176:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=02105743-16b8-46ab-87df-2aca0f3dbca3
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 9 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroup.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.GroupStatusEnum;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
@@ -32,7 +33,7 @@ public class CoursesGroup {
 	private Integer singleClassMinutes;
 	
 	/** 课程组状态 */
-	private String status;
+	private GroupStatusEnum status;
 	
 	/** 备注 */
 	private String memo;
@@ -127,15 +128,15 @@ public class CoursesGroup {
 	public Integer getSingleClassMinutes(){
 		return this.singleClassMinutes;
 	}
-			
-	public void setStatus(String status){
-		this.status = status;
+
+	public GroupStatusEnum getStatus() {
+		return status;
 	}
-	
-	public String getStatus(){
-		return this.status;
+
+	public void setStatus(GroupStatusEnum status) {
+		this.status = status;
 	}
-			
+
 	public void setMemo(String memo){
 		this.memo = memo;
 	}

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ClassGroupTypeEnum.java

@@ -12,7 +12,8 @@ public enum ClassGroupTypeEnum implements BaseEnum<String, ClassGroupTypeEnum> {
 	VIP("VIP", "vip课"),
 	DEMO("DEMO", "试听课"),
 	PRACTICE("PRACTICE", "网管课"),
-	SNAP("SNAP", "临时班级");
+	SNAP("SNAP", "临时班级"),
+	COMM("COMM","对外课程");
 
 	private String code;
 

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupStatusEnum.java

@@ -8,6 +8,8 @@ import com.ym.mec.common.enums.BaseEnum;
  **/
 public enum GroupStatusEnum implements BaseEnum<String, GroupStatusEnum> {
 
+    NOT_START("NOT_START","未开始"),
+    APPLYING("APPLYING","报名中"),
     NORMAL("NORMAL", "正常"),
     LOCK("LOCK", "锁定"),
     FINISH("FINISH", "结束"),

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -615,9 +615,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if(classGroupIds.size() > 0){
             courseScheduleEvaluates = courseScheduleEvaluateDao.findByClassGroupIds(classGroupIds);
         }
-        Map<Integer, Long> reportMap = new HashMap<>();
+        Map<Integer, List<CourseScheduleEvaluate>> reportMap = new HashMap<>();
         if(courseScheduleEvaluates.size()>0) {
-            reportMap = courseScheduleEvaluates.stream().collect(Collectors.toMap(CourseScheduleEvaluate::getClassGroupId, CourseScheduleEvaluate::getId));
+            reportMap = courseScheduleEvaluates.stream().collect(Collectors.groupingBy(CourseScheduleEvaluate::getClassGroupId));
         }
 
         Set<String> musicGroupId = musicCourse.stream().map(e -> e.getMusicId()).collect(Collectors.toSet());
@@ -673,7 +673,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             if(ClassGroupTypeEnum.PRACTICE == e.getType()){
                 e.setStudentNames(practiceStuNames.get(e.getPracticeId()));
                 e.setPracticeRenewUrl(practiceRenewUrlConfig.getParanValue() + e.getPracticeId());
-                if(reportMap.containsKey(e.getClassGroupId()) && (new Date()).compareTo(DateUtil.stringToDate("2020-03-01 12:18:00"))>=0){
+                if(reportMap.containsKey(e.getClassGroupId())){
                     e.setHasReport(true);
                     String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
                     e.setStudyReportUrl(baseUrl + "/#/reportDetail?classGroupId=" + e.getClassGroupId());

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -1179,6 +1179,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
                             throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 1));
                         }
+
+                        if(Objects.isNull(preCourseSchedule.getId())){
+                            continue;
+                        }
+
                         //助教冲突检测
                         if (Objects.isNull(preCourseSchedule.getId())) {
                             IntegerAndIntegerListDto integerAndIntegerListDto = classGroupTeachingTeacherMap.get(preCourseSchedule.getClassGroupId());

+ 143 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java

@@ -1,17 +1,25 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.dao.CoursesGroupDao;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.CourseGroupCreateDto;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.entity.CoursesGroup;
+import com.ym.mec.biz.dal.dto.CourseTimeDto;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.CoursesGroupService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
 
 @Service
 public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup> implements CoursesGroupService {
@@ -20,6 +28,22 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
     private CoursesGroupDao coursesGroupDao;
     @Autowired
     private CourseScheduleService courseScheduleService;
+    @Autowired
+    private ClassGroupDao classGroupDao;
+    @Autowired
+    private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
+    @Autowired
+    private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
+    @Autowired
+    private StudentAttendanceDao studentAttendanceDao;
+    @Autowired
+    private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
+    @Autowired
+    private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+    @Autowired
+    private TeacherAttendanceDao teacherAttendanceDao;
 
     @Override
     public BaseDAO<Long, CoursesGroup> getDAO() {
@@ -27,9 +51,124 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public void createCourseGroup(CourseGroupCreateDto courseGroupCreateInfo) {
+        CoursesGroup courseGroup = courseGroupCreateInfo.getCoursesGroup();
+        CourseGenerateDto courseCycleInfo = courseGroupCreateInfo.getCourseCycleInfo();
+        if(Objects.isNull(courseGroup.getName())|| StringUtils.isBlank(courseGroup.getName())){
+            throw new BizException("请填写课程班名称");
+        }
+        if(Objects.isNull(courseGroup.getSubjectId())){
+            throw new BizException("请选择科目");
+        }
+        if(Objects.isNull(courseGroup.getMaxStudentNum())){
+            throw new BizException("请填写班级人数");
+        }
+        if(Objects.isNull(courseCycleInfo.getSingleClassMinutes())){
+            throw new BizException("请填写课程时长");
+        }
+        if(Objects.isNull(courseCycleInfo.getCourseCreateStartTime())){
+            throw new BizException("请填写课程开始时间");
+        }
+        if(Objects.isNull(courseCycleInfo.getCourseTimes())){
+            throw new BizException("请填写课程数量");
+        }
 
+        //总课程时长
+        Integer totalCourseTime=courseCycleInfo.getCourseCount()*courseCycleInfo.getSingleClassMinutes();
+
+        Date now=new Date();
+        courseGroup.setSingleClassMinutes(courseCycleInfo.getSingleClassMinutes());
+        courseGroup.setStatus(GroupStatusEnum.APPLYING);
         List<CourseSchedule> newCourses = courseScheduleService.createCourses(courseGroupCreateInfo.getCourseCycleInfo());
+        for (CourseSchedule newCourse : newCourses) {
+            newCourse.setTeachMode(TeachModeEnum.ONLINE);
+            newCourse.setGroupType(GroupType.COMM);
+            newCourse.setType(CourseSchedule.CourseScheduleType.COMM);
+            newCourse.setTeacherId(courseGroup.getTeacherId());
+            newCourse.setActualTeacherId(courseGroup.getTeacherId());
+            newCourse.setIsLock(1);
+            newCourse.setStatus(CourseStatusEnum.NOT_START);
+            newCourse.setName(courseGroup.getName());
+        }
+        courseScheduleService.checkNewCourseSchedules(newCourses,false);
+
+        CourseSchedule firstCourseSchedule = newCourses.stream().min(Comparator.comparing(CourseSchedule::getStartClassTime)).get();
+        CourseSchedule latestCourseSchedule = newCourses.stream().max(Comparator.comparing(CourseSchedule::getEndClassTime)).get();
+        courseGroup.setCoursesStartDate(firstCourseSchedule.getStartClassTime());
+        courseGroup.setCoursesEndDate(latestCourseSchedule.getEndClassTime());
+
+        JSONArray courseTimesArray=new JSONArray();
+        for (CourseTimeDto courseTime : courseCycleInfo.getCourseTimes()) {
+            JSONObject courseTimeObject=new JSONObject();
+            courseTimeObject.put(String.valueOf(courseTime.getDayOfWeek()),courseTime.getStartClassTime());
+            courseTimesArray.add(courseTimeObject);
+        }
+
+        coursesGroupDao.insert(courseGroup);
+        //创建班级信息
+        ClassGroup classGroup = new ClassGroup();
+        classGroup.setSubjectIdList(courseGroup.getSubjectId().toString());
+        classGroup.setExpectStudentNum(1);
+        classGroup.setStudentNum(1);
+        classGroup.setName(courseGroup.getName());
+        classGroup.setTotalClassTimes(courseCycleInfo.getCourseCount());
+        classGroup.setType(ClassGroupTypeEnum.COMM);
+        classGroup.setDelFlag(0);
+        classGroup.setGroupType(GroupType.COMM);
+        classGroup.setMusicGroupId(courseGroup.getId().toString());
+        classGroup.setCreateTime(now);
+        classGroup.setUpdateTime(now);
+        classGroupDao.insert(classGroup);
+
+        //创建班级老师关联记录
+        ClassGroupTeacherMapper classGroupTeacherMapper = new ClassGroupTeacherMapper();
+        classGroupTeacherMapper.setMusicGroupId(courseGroup.getId().toString());
+        classGroupTeacherMapper.setClassGroupId(classGroup.getId());
+        classGroupTeacherMapper.setTeacherRole(TeachTypeEnum.BISHOP);
+        classGroupTeacherMapper.setUserId(courseGroup.getTeacherId());
+        classGroupTeacherMapper.setGroupType(GroupType.COMM);
+        classGroupTeacherMapper.setCreateTime(now);
+        classGroupTeacherMapper.setUpdateTime(now);
+        classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
+
+        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
+        List<TeacherAttendance> teacherAttendances = new ArrayList<>();
+
+        for (CourseSchedule courseSchedule : newCourses) {
+            //课表
+            courseSchedule.setMusicGroupId(courseGroup.getId().toString());
+            courseSchedule.setClassGroupId(classGroup.getId());
+            courseSchedule.setCreateTime(now);
+            courseSchedule.setUpdateTime(now);
+        }
+        courseScheduleDao.batchAddCourseSchedules(newCourses);
+
+        for (CourseSchedule courseSchedule : newCourses) {
+            //课程与老师薪水表
+            CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+            courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+            courseScheduleTeacherSalary.setGroupType(GroupType.COMM);
+            courseScheduleTeacherSalary.setMusicGroupId(courseGroup.getId().toString());
+            courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
+            courseScheduleTeacherSalary.setUserId(courseGroup.getTeacherId());
+            courseScheduleTeacherSalary.setExpectSalary(BigDecimal.ZERO);
+            courseScheduleTeacherSalary.setCreateTime(now);
+            courseScheduleTeacherSalary.setUpdateTime(now);
+            courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
+            courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
 
+            //教师签到记录
+            TeacherAttendance teacherAttendance = new TeacherAttendance();
+            teacherAttendance.setMusicGroupId(courseGroup.getId().toString());
+            teacherAttendance.setTeacherId(courseGroup.getTeacherId());
+            teacherAttendance.setClassGroupId(classGroup.getId());
+            teacherAttendance.setGroupType(GroupType.COMM);
+            teacherAttendance.setCourseScheduleId(courseSchedule.getId());
+            teacherAttendance.setCreateTime(now);
+            teacherAttendances.add(teacherAttendance);
+        }
+        courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
+        teacherAttendanceDao.batchInsert(teacherAttendances);
     }
 }

+ 3 - 3
mec-biz/src/main/resources/config/mybatis/CoursesGroupMapper.xml

@@ -15,7 +15,7 @@
 		<result column="teaching_arrangement_" property="teachingArrangement" />
 		<result column="organ_id_" property="organId" />
 		<result column="single_class_minutes_" property="singleClassMinutes" />
-		<result column="status_" property="status" />
+		<result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="memo_" property="memo" />
 		<result column="teacher_id_" property="teacherId" />
 		<result column="max_student_num_" property="maxStudentNum" />
@@ -46,7 +46,7 @@
 		</selectKey>
 		-->
 		INSERT INTO courses_group (id_,name_,subject_id_,courses_start_date_,courses_end_date_,teaching_arrangement_,organ_id_,single_class_minutes_,status_,memo_,teacher_id_,max_student_num_,apply_closing_date_,teaching_plan_,teacher_salary_settlement_method_,total_courses_price_,total_course_discount_price_,create_time_,update_time_)
-		VALUES(#{id},#{name},#{subjectId},#{coursesStartDate},#{coursesEndDate},#{teachingArrangement},#{organId},#{singleClassMinutes},#{status},#{memo},#{teacherId},#{maxStudentNum},#{applyClosingDate},#{teachingPlan},#{teacherSalarySettlementMethod},#{totalCoursesPrice},#{totalCourseDiscountPrice},NOW(),NOW())
+		VALUES(#{id},#{name},#{subjectId},#{coursesStartDate},#{coursesEndDate},#{teachingArrangement},#{organId},#{singleClassMinutes},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{memo},#{teacherId},#{maxStudentNum},#{applyClosingDate},#{teachingPlan},#{teacherSalarySettlementMethod},#{totalCoursesPrice},#{totalCourseDiscountPrice},NOW(),NOW())
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -60,7 +60,7 @@
 				subject_id_ = #{subjectId},
 			</if>
 			<if test="status != null">
-				status_ = #{status},
+				status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
 			<if test="organId != null">
 				organ_id_ = #{organId},

+ 43 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseGroupController.java

@@ -0,0 +1,43 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.CourseGroupCreateDto;
+import com.ym.mec.biz.service.CoursesGroupService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Objects;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/3/8
+ */
+@Api(tags = "对外课程组服务")
+@RequestMapping("courseGroup")
+@RestController
+public class CourseGroupController extends BaseController {
+
+    @Autowired
+    private CoursesGroupService coursesGroupService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "创建课程组")
+    @PostMapping("/createCourseGroup")
+    public HttpResponseResult createCourseGroup(@RequestBody CourseGroupCreateDto courseGroupCreateInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        courseGroupCreateInfo.getCoursesGroup().setTeacherId(sysUser.getId());
+        coursesGroupService.createCourseGroup(courseGroupCreateInfo);
+        return succeed();
+    }
+
+}