Bläddra i källkod

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

zouxuan 5 år sedan
förälder
incheckning
22aff90fc4
24 ändrade filer med 303 tillägg och 77 borttagningar
  1. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  3. 12 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageAccountBaseInfoDto.java
  4. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCashAccount.java
  5. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupCategory.java
  6. 11 3
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  7. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java
  8. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysUserCashAccountService.java
  9. 16 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  10. 25 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java
  11. 10 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  12. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java
  13. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  14. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java
  15. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  16. 8 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  17. 13 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  18. 2 0
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  19. 4 0
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountMapper.xml
  20. 17 0
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  21. 32 10
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  22. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  23. 8 0
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  24. 37 29
      mec-web/src/main/java/com/ym/mec/web/controller/SysUserCashAccountController.java

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -22,7 +22,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @param courseID
      * @return
      */
-    TeacherAttendanceDto getCurrentCourseDetail(@Param("courseID") Long courseID);
+    TeacherAttendanceDto getCurrentCourseDetail(@Param("courseID") Long courseID,
+                                                @Param("teacherId") Integer teacherId);
 
     /**
      * @param startTime:
@@ -58,6 +59,17 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     int batchDeleteCourseSchedules(@Param("courseScheduleIds") List<Long> courseScheduleIds);
 
     /**
+     * @describe 获取指定乐团下对应状态的课程编号列表
+     * @author Joburgess
+     * @date 2019/11/16
+     * @param musicGroupId:乐团编号
+     * @param status: 状态
+     * @return java.util.List<java.lang.Integer>
+     */
+    List<CourseSchedule> findMusicGroupCourseSchedules(@Param("musicGroupId") String musicGroupId,
+                                               @Param("status") String status);
+
+    /**
      * @param teacherId: 教师编号
      * @param classDate: 上课日期
      * @param startTime: 开始时间

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

@@ -128,6 +128,17 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	VipGroupSalaryBaseInfo getVipGroupSalaryInfo(@Param("vipGroupId") Long vipGroupId);
 
 	/**
+	 * @describe 统计学生缴费笔数
+	 * @author Joburgess
+	 * @date 2019/11/16
+	 * @param classGroupId: 班级编号
+	 * @return int
+	 */
+	int countStudentPaymentNum(@Param("classGroupId") Integer classGroupId);
+
+	BigDecimal countStudentPaymentFee(@Param("classGroupId") Integer classGroupId);
+
+	/**
 	 * @Author: Joburgess
 	 * @Date: 2019/10/11
 	 * @params [vipGroupId]

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageAccountBaseInfoDto.java

@@ -12,6 +12,9 @@ public class StudentManageAccountBaseInfoDto {
 
     @ApiModelProperty(value = "账户余额",required = false)
     private BigDecimal balance;
+    
+    @ApiModelProperty(value = "课程余额",required = false)
+    private BigDecimal courseBalance;
 
     @ApiModelProperty(value = "银行名称",required = false)
     private String bankName;
@@ -27,7 +30,15 @@ public class StudentManageAccountBaseInfoDto {
         this.balance = balance;
     }
 
-    public String getBankName() {
+    public BigDecimal getCourseBalance() {
+		return courseBalance;
+	}
+
+	public void setCourseBalance(BigDecimal courseBalance) {
+		this.courseBalance = courseBalance;
+	}
+
+	public String getBankName() {
         return bankName;
     }
 

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

@@ -33,6 +33,10 @@ public class SysUserCashAccount {
 	@ApiModelProperty(value = "保证金余额",required = false)
 	private BigDecimal marginBalance;
 	
+	/** 课程余额余额 */
+	@ApiModelProperty(value = "课程余额",required = false)
+	private BigDecimal courseBalance;
+	
 	/** 账户状态(0,冻结,1,正常;-1,注销;) */
 	@ApiModelProperty(value = "账户状态",required = false)
 	private PlatformCashAccountStatusEnum status;
@@ -93,6 +97,14 @@ public class SysUserCashAccount {
 		this.marginBalance = marginBalance;
 	}
 
+	public BigDecimal getCourseBalance() {
+		return courseBalance;
+	}
+
+	public void setCourseBalance(BigDecimal courseBalance) {
+		this.courseBalance = courseBalance;
+	}
+
 	public PlatformCashAccountStatusEnum getStatus() {
 		return status;
 	}

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupCategory.java

@@ -1,11 +1,11 @@
 package com.ym.mec.biz.dal.entity;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
 
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
 /**
  * 对应数据库表(vip_group_category):
  */
@@ -27,7 +27,7 @@ public class VipGroupCategory {
 	private java.util.Date updateTime;
 	
 	@ApiModelProperty(value = "单节课时",required = false)
-	private Integer singleClassMinutes;
+	private String singleClassMinutes;
 	
 	@ApiModelProperty(value = "学生数",required = false)
 	private Integer studentNum;
@@ -94,11 +94,11 @@ public class VipGroupCategory {
 		return this.updateTime;
 	}
 			
-	public void setSingleClassMinutes(Integer singleClassMinutes){
+	public void setSingleClassMinutes(String singleClassMinutes){
 		this.singleClassMinutes = singleClassMinutes;
 	}
 	
-	public Integer getSingleClassMinutes(){
+	public String getSingleClassMinutes(){
 		return this.singleClassMinutes;
 	}
 			

+ 11 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -13,7 +13,6 @@ import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
-import org.apache.commons.collections.iterators.ObjectGraphIterator;
 
 import java.util.Date;
 import java.util.List;
@@ -29,15 +28,24 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	TeacherAttendanceDto getCurrentCourseDetail(Long courseID);
 
 	/**
-	 * @describe 根据课程编号删除课程计划及对应的学生缴费、教师课酬记录
+	 * @describe 根据课程编号删除课程计划及对应的学生缴费、教师课酬记录、教师签到记录
 	 * @author Joburgess
 	 * @date 2019/10/31
-	 * @param courseScheduleIds:
+	 * @param courseScheduleIds: 课程计划编号列表
 	 * @return int
 	 */
 	void deleteCourseSchedules(List<Long> courseScheduleIds);
 
 	/**
+	 * @describe 删除乐团下所有未上的课时
+	 * @author Joburgess
+	 * @date 2019/11/16
+	 * @param musicGroupId:
+	 * @return void
+	 */
+	void batchDeleteMusicGroupNotStartCourse(String musicGroupId);
+
+	/**
 	 * @describe 判断该课程是否只能进行正常签到
 	 * @author Joburgess
 	 * @date 2019/11/5

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java

@@ -48,4 +48,12 @@ public interface StudentPaymentOrderDetailService extends BaseService<Long, Stud
      */
     List<Goods> findApplyOrderGoods(Long orderId);
 
+    /**
+     * 获取订单详情
+     * @param userId
+     * @param status
+     * @return
+     */
+    List<StudentPaymentOrderDetail>findUserApplyOrder(Integer userId,DealStatusEnum status);
+
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysUserCashAccountService.java

@@ -14,4 +14,11 @@ public interface SysUserCashAccountService extends BaseService<Integer, SysUserC
 	 * @return
 	 */
 	boolean updateBalance(Integer userId, BigDecimal decimal);
+
+	/**
+	 * 将课程余额转入到可用余额
+	 * @param userId
+	 * @return
+	 */
+	boolean transferCourseBalanceToBalance(Integer userId);
 }

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

@@ -92,7 +92,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		if(Objects.isNull(courseID)){
 			throw new BizException("参数错误!");
 		}
-		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(courseID);
+		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(courseID,user.getId());
 		if(Objects.isNull(currentCourseDetail)){
 		    throw new BizException("课程不存在");
         }
@@ -118,6 +118,21 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
+	public void batchDeleteMusicGroupNotStartCourse(String musicGroupId) {
+		if(StringUtils.isBlank(musicGroupId)){
+			throw new BizException("请指定乐团");
+		}
+		List<CourseSchedule> musicGroupCourseSchedules = courseScheduleDao.findMusicGroupCourseSchedules(musicGroupId, CourseStatusEnum.NOT_START.getCode());
+		if(CollectionUtils.isEmpty(musicGroupCourseSchedules)){
+			throw new BizException("此乐团不存在未上课程");
+		}
+		List<Long> courseScheduleIds = musicGroupCourseSchedules.stream()
+								.map(CourseSchedule::getId)
+								.collect(Collectors.toList());
+		deleteCourseSchedules(courseScheduleIds);
+	}
+
+	@Override
 	public YesOrNoEnum enableOnlyNormalAttendance(Date startClassTime,Long userId,boolean checkSchool,Integer schoolId){
 		Date endTime=startClassTime;
 		Date startTime=DateUtil.addHours(endTime,-1);

+ 25 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.dto.MusicGroupSubjectGoodsAndInfoDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GoodsType;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.util.collection.MapUtil;
 import org.snaker.engine.core.OrderService;
@@ -18,6 +19,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -143,12 +145,28 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
         MusicGroupSubjectPlan musicOneSubjectClassPlan = this.getMusicOneSubjectClassPlan(musicGroupId, subjectId);
         musicOneSubjectClassPlan.setFee(studentRegistration.getTemporaryCourseFee());
 
-        List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
-
-        String goodsIds = orderDetails.stream().filter(orderDetail -> orderDetail.getGoodsIdList() != null).map(orderDetail -> orderDetail.getGoodsIdList()).collect(Collectors.joining(","));
-
-        List<Goods> goodies = goodsService.findGoodsByIds(goodsIds);
+        //乐团乐器及辅件信息
+        List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
 
+        List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
+        for (StudentPaymentOrderDetail orderDetail : orderDetails) {
+            if (orderDetail.getGoodsIdList() == null || orderDetail.getGoodsIdList().isEmpty()) continue;
+            MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup = new MusicGroupSubjectGoodsGroup();
+            if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
+                musicGroupSubjectGoodsGroup.setName("乐器");
+                musicGroupSubjectGoodsGroup.setType(GoodsType.INSTRUMENT);
+            } else {
+                musicGroupSubjectGoodsGroup.setName("辅件");
+                musicGroupSubjectGoodsGroup.setType(GoodsType.ACCESSORIES);
+            }
+            musicGroupSubjectGoodsGroup.setId(orderDetail.getId());
+            musicGroupSubjectGoodsGroup.setGoodsIdList(orderDetail.getGoodsIdList());
+            musicGroupSubjectGoodsGroup.setMusicGroupId(musicGroupId);
+            musicGroupSubjectGoodsGroup.setPrice(orderDetail.getPrice());
+            List<Goods> goodies = goodsService.findGoodsByIds(orderDetail.getGoodsIdList());
+            musicGroupSubjectGoodsGroup.setGoodsList(goodies);
+            goodsGroups.add(musicGroupSubjectGoodsGroup);
+        }
 
         //获取声部(科目)下其他商品
         List<Goods> otherGoods = goodsService.findTypeGoods("OTHER");
@@ -156,7 +174,7 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
         MusicGroupSubjectGoodsAndInfoDto musicGroupSubjectGoodsAndInfo = new MusicGroupSubjectGoodsAndInfoDto();
         musicGroupSubjectGoodsAndInfo.setMusicGroupSubjectPlan(musicOneSubjectClassPlan);
         musicGroupSubjectGoodsAndInfo.setCourseScheduleInfo(courseForm);
-        musicGroupSubjectGoodsAndInfo.setStudentGoods(goodies);
+        musicGroupSubjectGoodsAndInfo.setMusicGroupSubjectGoodsGroupList(goodsGroups);
         musicGroupSubjectGoodsAndInfo.setOtherGoods(otherGoods);
         return musicGroupSubjectGoodsAndInfo;
     }
@@ -164,6 +182,6 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
 
     @Override
     public MusicGroupSubjectPlan findSubjectPlan(String musicGroupId, Integer subjectId) {
-        return musicGroupSubjectPlanDao.findSubjectPlan(musicGroupId,subjectId);
+        return musicGroupSubjectPlanDao.findSubjectPlan(musicGroupId, subjectId);
     }
 }

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

@@ -200,7 +200,10 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 			throw new BizException("开课2个小时之前才可以请假");
 		}
 		
-		StudentAttendance studentAttendance  = new StudentAttendance();
+		StudentAttendance studentAttendance  = studentAttendanceDao.findByStatusAndCourseScheduleId(userId,courseScheduleId.intValue());
+		if(Objects.isNull(studentAttendance)){
+			studentAttendance=new StudentAttendance();
+		}
 		studentAttendance.setClassGroupId(courseSchedule.getClassGroupId());
 		studentAttendance.setCourseScheduleId(courseScheduleId);
 		studentAttendance.setCreateTime(date);
@@ -208,8 +211,12 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		studentAttendance.setRemark(remark);
 		studentAttendance.setStatus(StudentAttendanceStatusEnum.LEAVE);
 		studentAttendance.setUserId(userId);
-		
-		studentAttendanceDao.insert(studentAttendance);
+
+		if(Objects.nonNull(studentAttendance.getId())){
+			studentAttendanceDao.update(studentAttendance);
+		}else{
+			studentAttendanceDao.insert(studentAttendance);
+		}
 		
 		ClassGroupStudentMapper classGroupStudentMapper = classGroupStudentMapperDao.query(courseSchedule.getClassGroupId(), userId);
 		if(Objects.isNull(classGroupStudentMapper)){

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

@@ -120,4 +120,9 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
         }
         return goodies;
     }
+
+    @Override
+    public List<StudentPaymentOrderDetail> findUserApplyOrder(Integer userId, DealStatusEnum status) {
+        return studentPaymentOrderDetailDao.findUserApplyOrder(userId,status);
+    }
 }

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

@@ -191,8 +191,6 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             userId = sysUser.getId();
             //添加用户现金账户
             sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
-            // 添加用户电子签章账户
-            //contractService.register(userId, sysUser.getRealName(), sysUser.getIdCardNo(), sysUser.getPhone());
             //注册到融云
             if (StringUtils.isEmpty(sysUser.getAvatar())) {
                 sysUser.setAvatar(sysConfigDao.findConfigValue(SysConfigService.USER_DEFAULT_HEAD_URL));
@@ -252,7 +250,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
         studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
         //乐器及打包辅件
-        if (goodsGroups != null) {
+        if (goodsGroups != null &&goodsGroups.size() >0) {
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 StudentPaymentOrderDetail studentPaymentOrderDetail4goodsGroup = new StudentPaymentOrderDetail();
                 OrderDetailTypeEnum type = null;
@@ -341,7 +339,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
         studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
         //乐器及打包辅件
-        if (goodsGroups != null) {
+        if (goodsGroups != null &&goodsGroups.size() >0) {
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 StudentPaymentOrderDetail studentPaymentOrderDetail4goodsGroup = new StudentPaymentOrderDetail();
                 OrderDetailTypeEnum type = null;
@@ -730,6 +728,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         student.setIdCardNo(studentRegistration.getIdCardNo());
         update(student);
         studentRegistrationDao.updateUser(student.getUserId(), student.getParentsName(), student.getIdCardNo());
+        // 添加用户电子签章账户
+        contractService.register(student.getUserId(),student.getParentsName(), student.getIdCardNo(), student.getParentsPhone());
         return student;
     }
 }

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java

@@ -9,7 +9,11 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDetailDao;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.PlatformCashAccountStatusEnum;
 import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -22,6 +26,9 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
 	@Autowired
 	private SysUserCashAccountDao sysUserCashAccountDao;
 
+	@Autowired
+	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
+
 	@Override
 	public BaseDAO<Integer, SysUserCashAccount> getDAO() {
 		return sysUserCashAccountDao;
@@ -52,4 +59,38 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
 		return true;
 	}
 
+	@Override
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	public boolean transferCourseBalanceToBalance(Integer userId) {
+		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+		if (cashAccount == null) {
+			throw new BizException("用户[{}]现金账户不存在", userId);
+		}
+
+		if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+			throw new BizException("账户不可用");
+		}
+
+		Date date = new Date();
+
+		SysUserCashAccountDetail detail = new SysUserCashAccountDetail();
+		detail.setAmount(cashAccount.getCourseBalance());
+		detail.setBalance(cashAccount.getBalance().add(cashAccount.getCourseBalance()));
+		detail.setComment("课程余额转账");
+		detail.setCreateTime(date);
+		detail.setStatus(DealStatusEnum.SUCCESS);
+		detail.setType(PlatformCashAccountDetailTypeEnum.FILL_ACCOUNT);
+		detail.setUpdateTime(date);
+		detail.setUserId(userId);
+
+		sysUserCashAccountDetailDao.insert(detail);
+
+		cashAccount.setBalance(cashAccount.getBalance().add(cashAccount.getCourseBalance()));
+		cashAccount.setCourseBalance(new BigDecimal(0));
+		cashAccount.setUpdateTime(date);
+
+		sysUserCashAccountDao.update(cashAccount);
+		return true;
+	}
+
 }

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

@@ -85,7 +85,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			isAttendance=true;
 		}
 
-		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId());
+		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId(),user.getId());
 		if(Objects.isNull(currentCourseDetail)){
 			throw new BizException("课程不存在");
 		}

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

@@ -186,6 +186,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				true,
 				true);
 
+//		if()
+
 		//如果默认课酬与实际课酬不匹配则需要审批
 		if(costInfo.get("offlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary())!=0||
 			costInfo.get("onlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary())!=0){
@@ -1130,10 +1132,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     		throw new BizException("未找到指定vip课");
 		}
 
-		if(vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)){
-			throw new BizException("此课程还未正式开课");
-		}
-
 		PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
@@ -1175,16 +1173,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(vipGroupSalaryBaseInfo.getTotalSalary())){
 			vipGroupSalaryBaseInfo.setTotalSalary(new BigDecimal(0));
 		}
+
+		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroup.getId(),null);
+
 		//扣费笔数
-		vipGroupSalaryBaseInfo.setFeeDeductionNum(vipGroupDao.countVipGroupDeductionNum(queryInfo.getVipGroupId()));
+		vipGroupSalaryBaseInfo.setFeeDeductionNum(vipGroupDao.countStudentPaymentNum(classGroup.getId()));
 		//扣费总额
-		if(vipGroupSalaryBaseInfo.getTotalSalary().intValue()>0){
-			vipGroupSalaryBaseInfo.setTotalFeeDeduction(vipGroupSalaryBaseInfo.getExpectTotalSalary().subtract(vipGroupSalaryBaseInfo.getTotalSalary()));
+		if(vipGroupSalaryBaseInfo.getFeeDeductionNum()>0){
+			vipGroupSalaryBaseInfo.setTotalFeeDeduction(vipGroupDao.countStudentPaymentFee(classGroup.getId()));
 		}else{
 			vipGroupSalaryBaseInfo.setTotalFeeDeduction(new BigDecimal(0));
 		}
-
-		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroup.getId(),null);
 		BigDecimal studentNum=new BigDecimal(classGroup.getStudentNum());
 		//课程总价
 		vipGroupSalaryBaseInfo.setTotalCoursePrice(vipGroup.getTotalPrice().multiply(studentNum));

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

@@ -245,10 +245,10 @@
         course_schedule cs
         LEFT JOIN class_group cg ON cs.class_group_id_=cg.id_
         LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
-        LEFT JOIN school s ON mg.school_id_=s.id_
+        LEFT JOIN school s ON cs.schoole_id_=s.id_
         LEFT JOIN sys_user su ON cs.actual_teacher_id_=su.id_
         LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
-        WHERE cs.id_= #{courseID}
+        WHERE cs.id_= #{courseID} AND ta.teacher_id_=#{teacherId}
     </select>
 
     <select id="getTeacherCourseByDateSpeed"
@@ -1258,6 +1258,7 @@
         <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
             #{classGroupId}
         </foreach>
+        AND csts.teacher_role_='BISHOP'
         ORDER BY start_class_time_
     </select>
     <select id="findStudentMap" resultType="java.util.Map">
@@ -1310,6 +1311,16 @@
 
         GROUP BY class_group_id_
     </select>
+    <select id="findMusicGroupCourseSchedules" resultMap="CourseSchedule">
+        SELECT
+            cs.*
+        FROM
+            course_schedule cs
+            LEFT JOIN class_group cg ON cs.class_group_id_=cg.id_
+        WHERE
+            cg.music_group_id_=#{musicGroupId}
+            AND status_ = #{status}
+    </select>
     <delete id="deleteCourseSchedulesByClassGroupIds">
         DELETE FROM course_schedule WHERE class_group_id_ IN
         <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">

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

@@ -27,6 +27,7 @@
 
     <resultMap id="studentManageAccountBaseInfo" type="com.ym.mec.biz.dal.dto.StudentManageAccountBaseInfoDto">
         <result property="balance" column="balance_"/>
+        <result property="courseBalance" column="course_balance_"/>
         <result property="bankName" column="bank_name_"/>
         <result property="cardNo" column="card_no_"/>
     </resultMap>
@@ -292,6 +293,7 @@
     <select id="getStudentAccountBaseInfo" resultMap="studentManageAccountBaseInfo">
         SELECT
             suca.balance_,
+            suca.course_balance_,
             subc.bank_name_,
             subc.card_no_
         FROM

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

@@ -12,6 +12,7 @@
         <result column="balance_" property="balance"/>
         <result column="frozen_amount_" property="frozenAmount"/>
         <result column="margin_balance_" property="marginBalance"/>
+        <result column="course_balance_" property="courseBalance"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time" property="updateTime"/>
@@ -61,6 +62,9 @@
             <if test="marginBalance != null">
                 margin_balance_ = #{marginBalance},
             </if>
+            <if test="courseBalance != null">
+                course_balance_ = #{courseBalance},
+            </if>
             <if test="currency != null">
                 currency_ = #{currency},
             </if>

+ 17 - 0
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -685,4 +685,21 @@
           payment_expire_date_ &lt; NOW( )
           AND status_ =1
     </select>
+
+    <select id="countStudentPaymentNum" resultType="int">
+        SELECT
+            COUNT(*)
+        FROM
+            course_schedule cs
+            LEFT JOIN course_schedule_student_payment cssp ON cs.id_=cssp.user_id_
+            WHERE cssp.settlement_time_ IS NOT NULL AND cs.class_group_id_=#{classGroupId}
+    </select>
+    <select id="countStudentPaymentFee" resultType="java.math.BigDecimal">
+        SELECT
+            SUM(actual_price_)
+        FROM
+            course_schedule cs
+            LEFT JOIN course_schedule_student_payment cssp ON cs.id_=cssp.user_id_
+            WHERE cssp.settlement_time_ IS NOT NULL AND cs.class_group_id_=#{classGroupId}
+    </select>
 </mapper>

+ 32 - 10
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -28,10 +28,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 @RequestMapping("musicGroup")
 @Api(tags = "乐团服务")
@@ -224,15 +221,29 @@ public class MusicGroupController extends BaseController {
         //获取课程价格
         MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId());
         BigDecimal courseFee = musicOneSubjectClassPlan.getFee();
-        if(studentRegistration.getTemporaryCourseFee() != null){
+        if (studentRegistration.getTemporaryCourseFee() != null) {
             courseFee = studentRegistration.getTemporaryCourseFee();
         }
         orderAmount = orderAmount.add(courseFee);
 
 
         //乐器及打包辅件
-        List<MusicGroupSubjectGoodsGroup> goodsGroups = null;
-        if (registerPayDto.getGoodsGroupIds() != null && !registerPayDto.getGoodsGroupIds().equals("")) {
+        List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
+
+        if (studentRegistration.getTemporaryCourseFee() != null) {
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
+            for (StudentPaymentOrderDetail orderDetail : orderDetails) {
+                MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup = new MusicGroupSubjectGoodsGroup();
+                GoodsType goodsType = orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) ? GoodsType.INSTRUMENT : GoodsType.ACCESSORIES;
+                musicGroupSubjectGoodsGroup.setType(goodsType);
+                musicGroupSubjectGoodsGroup.setGoodsIdList(orderDetail.getGoodsIdList());
+                musicGroupSubjectGoodsGroup.setPrice(orderDetail.getPrice());
+
+                goodsGroups.add(musicGroupSubjectGoodsGroup);
+
+                orderAmount = orderAmount.add(orderDetail.getPrice());
+            }
+        } else if (registerPayDto.getGoodsGroupIds() != null && !registerPayDto.getGoodsGroupIds().equals("")) {
             goodsGroups = musicGroupSubjectGoodsGroupService.findGoodsGroupByIds(registerPayDto.getGoodsGroupIds());
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
@@ -315,15 +326,26 @@ public class MusicGroupController extends BaseController {
         //获取课程价格
         MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId());
         BigDecimal courseFee = musicOneSubjectClassPlan.getFee();
-        if(studentRegistration.getTemporaryCourseFee() != null){
+        if (studentRegistration.getTemporaryCourseFee() != null) {
             courseFee = studentRegistration.getTemporaryCourseFee();
         }
         orderAmount = orderAmount.add(courseFee);
 
 
         //乐器及打包辅件
-        List<MusicGroupSubjectGoodsGroup> goodsGroups = null;
-        if (registerPayDto.getGoodsGroupIds() != null && !registerPayDto.getGoodsGroupIds().equals("")) {
+        List<MusicGroupSubjectGoodsGroup> goodsGroups = new ArrayList<>();
+        if (studentRegistration.getTemporaryCourseFee() != null) {
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
+            for (StudentPaymentOrderDetail orderDetail : orderDetails) {
+                MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup = new MusicGroupSubjectGoodsGroup();
+                GoodsType goodsType = orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) ? GoodsType.INSTRUMENT : GoodsType.ACCESSORIES;
+                musicGroupSubjectGoodsGroup.setType(goodsType);
+                musicGroupSubjectGoodsGroup.setGoodsIdList(orderDetail.getGoodsIdList());
+                musicGroupSubjectGoodsGroup.setPrice(orderDetail.getPrice());
+                goodsGroups.add(musicGroupSubjectGoodsGroup);
+                orderAmount = orderAmount.add(orderDetail.getPrice());
+            }
+        } else if (registerPayDto.getGoodsGroupIds() != null && !registerPayDto.getGoodsGroupIds().equals("")) {
             goodsGroups = musicGroupSubjectGoodsGroupService.findGoodsGroupByIds(registerPayDto.getGoodsGroupIds());
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -319,7 +319,7 @@ public class StudentOrderController extends BaseController {
 
     }
 
-//    @Scheduled(cron = "0/30 * * * * ?")
+    @Scheduled(cron = "0/30 * * * * ?")
     public void setSuccessStatus() throws Exception {
         List<StudentPaymentOrder> payingOrders = studentPaymentOrderService.findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
 

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -210,6 +210,14 @@ public class CourseScheduleController extends BaseController {
 		return succeed();
 	}
 
+    @ApiOperation(value = "删除乐团下所有未上的课时")
+    @GetMapping("/batchDeleteMusicGroupNotStartCourse")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchDeleteMusicGroupNotStartCourse')")
+	public Object batchDeleteMusicGroupNotStartCourse(String musicGroupId){
+        scheduleService.batchDeleteMusicGroupNotStartCourse(musicGroupId);
+        return succeed();
+    }
+
 	@ApiOperation(value = "乐团详情--课酬调整--课程教师列表")
 	@GetMapping("/queryTeacherSalary")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/queryTeacherSalary')")

+ 37 - 29
mec-web/src/main/java/com/ym/mec/web/controller/SysUserCashAccountController.java

@@ -1,46 +1,54 @@
 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.service.SysUserCashAccountService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.page.QueryInfo;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 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 com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.page.QueryInfo;
+
 @RequestMapping("userCashAccount")
 @Api(tags = "用户账户服务")
 @RestController
 public class SysUserCashAccountController extends BaseController {
 
-    @Autowired
-    private SysUserCashAccountService sysUserCashAccountService;
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
-
-    @ApiOperation(value = "获取用户账户信息")
-    @GetMapping("/get")
-    @PreAuthorize("@pcs.hasPermissions('userCashAccount/get')")
-    public Object add() {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("请重新登录");
-        }
-        return succeed(sysUserCashAccountService.get(sysUser.getId()));
-    }
-
-    @ApiOperation(value = "分页查询收费类型列表")
-    @GetMapping("/queryPage")
-    @PreAuthorize("@pcs.hasPermissions('userCashAccount/queryPage')")
-    public Object queryPage(QueryInfo queryInfo) {
-        return succeed(sysUserCashAccountService.queryPage(queryInfo));
-    }
-
+	@Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation(value = "获取用户账户信息")
+	@GetMapping("/get")
+	@PreAuthorize("@pcs.hasPermissions('userCashAccount/get')")
+	public Object add() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed("请重新登录");
+		}
+		return succeed(sysUserCashAccountService.get(sysUser.getId()));
+	}
+
+	@ApiOperation(value = "分页查询收费类型列表")
+	@GetMapping("/queryPage")
+	@PreAuthorize("@pcs.hasPermissions('userCashAccount/queryPage')")
+	public Object queryPage(QueryInfo queryInfo) {
+		return succeed(sysUserCashAccountService.queryPage(queryInfo));
+	}
+
+	@ApiOperation(value = "分页查询收费类型列表")
+	@PostMapping("/transferCourseBalanceToBalance")
+	@PreAuthorize("@pcs.hasPermissions('userCashAccount/transferCourseBalanceToBalance')")
+	public Object transferCourseBalanceToBalance(Integer userId) {
+		sysUserCashAccountService.transferCourseBalanceToBalance(userId);
+		return succeed();
+	}
 }