瀏覽代碼

Merge remote-tracking branch 'origin/master'

Joburgess 5 年之前
父節點
當前提交
bc9a2706d6

+ 10 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java

@@ -60,7 +60,16 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @params [days:天数]
 	 * @describe 获取多少天之前的未结算教师课酬记录(vip课)
 	 */
-	List<CourseScheduleTeacherSalary> findSomeDayAgoTeacherCourseSalaryNoSettlement(@Param("days") Integer days);
+	List<CourseScheduleTeacherSalary> findSomeDayAgoTeacherCourseSalaryNoSettlement(@Param("days") Integer days,@Param("groupType") String groupType);
+
+	/**
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary>
+	 * @Author: Joburgess
+	 * @Date: 2019/10/15
+	 * @params [days:天数]
+	 * @describe 获取多少天之前的未结算教师课酬记录(陪练课课)
+	 */
+	List<CourseScheduleTeacherSalary> findTeacherCourseSalaryNoSettlement(@Param("days") Integer days,@Param("groupType") String groupType);
 
 	/**
 	 * 查询老师指定课程的课酬

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java

@@ -49,6 +49,15 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
     void teacherSalarySettlement();
 
     /**
+     * @Author: Joburgess
+     * @Date: 2019/10/15
+     * @params []
+     * @return void
+     * @describe 教师陪练课课酬结算
+     */
+    void practiceTeacherSalarySettlement();
+
+    /**
      * @describe 教师乐团课课酬结算
      * @author Joburgess
      * @date 2019/11/3

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

@@ -47,7 +47,7 @@ public interface SysUserCashAccountService extends BaseService<Integer, SysUserC
 	 * @param userId
 	 * @return
 	 */
-	boolean transferCourseBalanceToBalance(Integer userId);
+	boolean transferCourseBalanceToBalance(Integer userId,BigDecimal money);
 
 	/**
 	 * 获取行级锁

+ 15 - 20
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -418,6 +418,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					} else {
 						courseSchedule.setName(type.getMsg());
 					}
+					courseScheduleDao.insert(courseSchedule);
 					courseScheduleList.add(courseSchedule);
 
 					// 课程与老师薪水表
@@ -518,10 +519,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		//检查冲突
 		checkNewCourseSchedules(courseScheduleList, false);
 
-		if (courseScheduleList.size() > 0) {
-			courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
-		}
-
 		if (courseScheduleTeacherSalaries.size() > 0) {
 			courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
 		}
@@ -3690,6 +3687,20 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if(courseSchedules != null && courseSchedules.size() > 0){
             courseSchedules = courseSchedules.stream().filter(courseSchedule -> !courseSchedule.getActualTeacherId().equals(teacherId)).collect(Collectors.toList());
         }
+		PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(practiceGroupId));
+		if(Objects.nonNull(subjectId)&&!subjectId.equals(practiceGroup.getSubjectId())){
+			Subject subject = subjectDao.get(subjectId);
+			String groupName = practiceGroup.getName();
+			groupName=groupName.substring(groupName.indexOf("•"));
+			groupName=subject.getName()+groupName;
+			practiceGroup.setName(groupName);
+			practiceGroup.setSubjectId(subjectId);
+			practiceGroupDao.update(practiceGroup);
+			ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(practiceGroupId, GroupType.PRACTICE.getCode());
+			classGroup.setName(groupName);
+			classGroupDao.update(classGroup);
+			courseScheduleDao.updateCourseNameByGroup(practiceGroupId,GroupType.PRACTICE,groupName);
+		}
         classGroupTeacherMapperService.updateTeacher(practiceGroupId,teacherId,GroupType.PRACTICE.getCode());
         classGroupTeacherSalaryDao.updateTeacher(practiceGroupId,teacherId,GroupType.PRACTICE.getCode());
         practiceGroupDao.updateUserId(practiceGroupId,teacherId);
@@ -3718,8 +3729,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         courseScheduleDao.batchUpdate(courseSchedules);
         Set<Long> courseScheduleIds = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toSet());
 
-        PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(practiceGroupId));
-
         if(Objects.nonNull(practiceGroup.getBuyMonths())){
             List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
             if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
@@ -3743,20 +3752,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         teacherAttendanceDao.batchUpdateTeacher(courseScheduleIds,teacherId);
         courseScheduleModifyLogDao.batchInsert(scheduleModifyLogs);
 
-        if(Objects.nonNull(subjectId)&&!subjectId.equals(practiceGroup.getSubjectId())){
-            Subject subject = subjectDao.get(subjectId);
-            String groupName = practiceGroup.getName();
-            groupName=groupName.substring(groupName.indexOf("•"));
-            groupName=subject.getName()+groupName;
-            practiceGroup.setName(groupName);
-            practiceGroup.setSubjectId(subjectId);
-            practiceGroupDao.update(practiceGroup);
-            ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(practiceGroupId, GroupType.PRACTICE.getCode());
-            classGroup.setName(groupName);
-            classGroupDao.update(classGroup);
-            courseScheduleDao.updateCourseNameByGroup(practiceGroupId,GroupType.PRACTICE,groupName);
-        }
-
         if (teacherIdMap != null && teacherIdMap.size() > 0) {
             sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_COURSE_SCHEDULE_CHANGE_RESULT,
                     teacherIdMap, null, 0, "7","TEACHER");

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

@@ -191,13 +191,31 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public void practiceTeacherSalarySettlement() {
+        int days = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.VIP_APPEAL_DAYS_RANGE).getParanValue());
+        //获取教师未结算课程记录
+        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(days,GroupType.PRACTICE.getCode());
+        if (CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
+            LOGGER.info("未获取到未结算课酬记录!");
+            return;
+        }
+        Date now = new Date();
+        someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
+            courseScheduleTeacherSalary.setActualSalary(courseScheduleTeacherSalary.getExpectSalary());
+            courseScheduleTeacherSalary.setSettlementTime(now);
+            courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
+        });
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public void teacherSalarySettlement() {
         int days = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.VIP_APPEAL_DAYS_RANGE).getParanValue());
 
         BigDecimal percent = new BigDecimal(10);
 
         //获取教师未结算课程记录
-        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findSomeDayAgoTeacherCourseSalaryNoSettlement(days);
+        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findSomeDayAgoTeacherCourseSalaryNoSettlement(days,"VIP");
         if (CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
             LOGGER.info("未获取到未结算课酬记录!");
             return;

+ 211 - 200
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java

@@ -32,205 +32,216 @@ import java.util.Map;
 @Service
 public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysUserCashAccount> implements SysUserCashAccountService {
 
-	@Autowired
-	private SysUserCashAccountDao sysUserCashAccountDao;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private SysMessageService sysMessageService;
-
-	@Autowired
-	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
-	@Autowired
-	private SysUserCoursesAccountDetailDao sysUserCoursesAccountDetailDao;
-
-	@Override
-	public BaseDAO<Integer, SysUserCashAccount> getDAO() {
-		return sysUserCashAccountDao;
-	}
-
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-	public boolean updateBalance(Integer userId, BigDecimal decimal) {
-
-		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
-		if (cashAccount == null) {
-			throw new BizException("用户[{}]现金账户不存在", userId);
-		}
-
-		if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
-			throw new BizException("账户不可用");
-		}
-		BigDecimal balance = cashAccount.getBalance().add(decimal);
-		if (balance.doubleValue() < 0) {
-			throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
-		}
-
-		cashAccount.setBalance(balance);
-		cashAccount.setUpdateTime(new Date());
-
-		sysUserCashAccountDao.update(cashAccount);
-
-		return true;
-	}
-
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-	public boolean updateBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String memo) {
-		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
-		if (cashAccount == null) {
-			throw new BizException("用户[{}]现金账户不存在", userId);
-		}
-
-		if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
-			throw new BizException("账户不可用");
-		}
-		BigDecimal balance = cashAccount.getBalance().add(decimal);
-		if (balance.doubleValue() < 0) {
-			throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
-		}
-
-		Date date = new Date();
-
-		SysUserCashAccountDetail detail = new SysUserCashAccountDetail();
-		detail.setAmount(decimal);
-		detail.setBalance(cashAccount.getBalance().add(decimal));
-		detail.setComment(memo);
-		detail.setCreateTime(date);
-		detail.setStatus(DealStatusEnum.SUCCESS);
-		detail.setType(type);
-		detail.setUpdateTime(date);
-		detail.setUserId(userId);
-
-		sysUserCashAccountDetailDao.insert(detail);
-
-		cashAccount.setBalance(balance);
-		cashAccount.setUpdateTime(date);
-
-		sysUserCashAccountDao.update(cashAccount);
-		if(!decimal.equals(BigDecimal.ZERO)){
-			//推送余额消费信息
-			Map<Integer,String> phoneMap = new HashMap<>(1);
-			SysUser sysUser = sysUserFeignService.queryUserById(userId);
-			phoneMap.put(userId,sysUser.getPhone());
-			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
-					phoneMap,null,0,null,"",decimal,balance);
-			Map<Integer,String> idMap = new HashMap<>(1);
-			idMap.put(userId,userId.toString());
-			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
-					idMap,null,0,null,"",decimal,balance);
-		}
-		return true;
-	}
-
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-	public boolean updateCourseBalance(Integer userId, BigDecimal decimal, BigDecimal amount, String description) {
-		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
-		if (cashAccount == null) {
-			throw new BizException("用户[{}]现金账户不存在", userId);
-		}
-
-		cashAccount.setCourseBalance(decimal);
-		cashAccount.setUpdateTime(new Date());
-
-		sysUserCashAccountDao.update(cashAccount);
-
-		if(amount.compareTo(BigDecimal.ZERO)!=0){
-			SysUser sysUser = sysUserFeignService.queryUserById(userId);
-			SysUserCoursesAccountDetail sysUserCoursesAccountDetail=new SysUserCoursesAccountDetail();
-			sysUserCoursesAccountDetail.setUserId(userId);
-			sysUserCoursesAccountDetail.setAmount(amount);
-			sysUserCoursesAccountDetail.setBalance(decimal);
-			sysUserCoursesAccountDetail.setDescription(description+"-"+sysUser.getId());
-			sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-			sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
-		}
-
-		return true;
-	}
-
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-	public boolean appendCourseBalance(Integer userId, BigDecimal decimal, String description) {
-		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
-		if (cashAccount == null) {
-			throw new BizException("用户[{}]现金账户不存在", userId);
-		}
-
-		BigDecimal balance = cashAccount.getCourseBalance().add(decimal);
-		if (balance.doubleValue() < 0) {
-			throw new BizException("现金账户[{}]课程余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
-		}
-
-		Date date = new Date();
-		cashAccount.setCourseBalance(balance);
-		cashAccount.setUpdateTime(date);
-
-		sysUserCashAccountDao.update(cashAccount);
-
-		if(decimal.compareTo(BigDecimal.ZERO)!=0){
-			SysUser sysUser = sysUserFeignService.queryUserById(userId);
-			SysUserCoursesAccountDetail sysUserCoursesAccountDetail=new SysUserCoursesAccountDetail();
-			sysUserCoursesAccountDetail.setUserId(userId);
-			sysUserCoursesAccountDetail.setAmount(decimal);
-			sysUserCoursesAccountDetail.setBalance(balance);
-			sysUserCoursesAccountDetail.setDescription(description+"-"+sysUser.getId());
-			sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-			sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
-		}
-
-		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);
-
-		if(cashAccount.getCourseBalance().compareTo(BigDecimal.ZERO)!=0){
-			SysUserCoursesAccountDetail sysUserCoursesAccountDetail=new SysUserCoursesAccountDetail();
-			sysUserCoursesAccountDetail.setUserId(userId);
-			sysUserCoursesAccountDetail.setAmount(cashAccount.getCourseBalance());
-			sysUserCoursesAccountDetail.setBalance(new BigDecimal(0));
-			sysUserCoursesAccountDetail.setDescription("课程余额转账");
-			sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-			sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
-		}
-
-		return true;
-	}
-
-	@Override
-	public SysUserCashAccount getLocked(Integer userId) {
-		return sysUserCashAccountDao.getLocked(userId);
-	}
+    @Autowired
+    private SysUserCashAccountDao sysUserCashAccountDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    @Autowired
+    private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
+    @Autowired
+    private SysUserCoursesAccountDetailDao sysUserCoursesAccountDetailDao;
+
+    @Override
+    public BaseDAO<Integer, SysUserCashAccount> getDAO() {
+        return sysUserCashAccountDao;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public boolean updateBalance(Integer userId, BigDecimal decimal) {
+
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+            throw new BizException("账户不可用");
+        }
+        BigDecimal balance = cashAccount.getBalance().add(decimal);
+        if (balance.doubleValue() < 0) {
+            throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
+        }
+
+        cashAccount.setBalance(balance);
+        cashAccount.setUpdateTime(new Date());
+
+        sysUserCashAccountDao.update(cashAccount);
+
+        return true;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public boolean updateBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String memo) {
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+            throw new BizException("账户不可用");
+        }
+        BigDecimal balance = cashAccount.getBalance().add(decimal);
+        if (balance.doubleValue() < 0) {
+            throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
+        }
+
+        Date date = new Date();
+
+        SysUserCashAccountDetail detail = new SysUserCashAccountDetail();
+        detail.setAmount(decimal);
+        detail.setBalance(cashAccount.getBalance().add(decimal));
+        detail.setComment(memo);
+        detail.setCreateTime(date);
+        detail.setStatus(DealStatusEnum.SUCCESS);
+        detail.setType(type);
+        detail.setUpdateTime(date);
+        detail.setUserId(userId);
+
+        sysUserCashAccountDetailDao.insert(detail);
+
+        cashAccount.setBalance(balance);
+        cashAccount.setUpdateTime(date);
+
+        sysUserCashAccountDao.update(cashAccount);
+        if (!decimal.equals(BigDecimal.ZERO)) {
+            //推送余额消费信息
+            Map<Integer, String> phoneMap = new HashMap<>(1);
+            SysUser sysUser = sysUserFeignService.queryUserById(userId);
+            phoneMap.put(userId, sysUser.getPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
+                    phoneMap, null, 0, null, "", decimal, balance);
+            Map<Integer, String> idMap = new HashMap<>(1);
+            idMap.put(userId, userId.toString());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
+                    idMap, null, 0, null, "", decimal, balance);
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public boolean updateCourseBalance(Integer userId, BigDecimal decimal, BigDecimal amount, String description) {
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        cashAccount.setCourseBalance(decimal);
+        cashAccount.setUpdateTime(new Date());
+
+        sysUserCashAccountDao.update(cashAccount);
+
+        if (amount.compareTo(BigDecimal.ZERO) != 0) {
+            SysUser sysUser = sysUserFeignService.queryUserById(userId);
+            SysUserCoursesAccountDetail sysUserCoursesAccountDetail = new SysUserCoursesAccountDetail();
+            sysUserCoursesAccountDetail.setUserId(userId);
+            sysUserCoursesAccountDetail.setAmount(amount);
+            sysUserCoursesAccountDetail.setBalance(decimal);
+            sysUserCoursesAccountDetail.setDescription(description + "-" + sysUser.getId());
+            sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+            sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public boolean appendCourseBalance(Integer userId, BigDecimal decimal, String description) {
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        BigDecimal balance = cashAccount.getCourseBalance().add(decimal);
+        if (balance.doubleValue() < 0) {
+            throw new BizException("现金账户[{}]课程余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
+        }
+
+        Date date = new Date();
+        cashAccount.setCourseBalance(balance);
+        cashAccount.setUpdateTime(date);
+
+        sysUserCashAccountDao.update(cashAccount);
+
+        if (decimal.compareTo(BigDecimal.ZERO) != 0) {
+            SysUser sysUser = sysUserFeignService.queryUserById(userId);
+            SysUserCoursesAccountDetail sysUserCoursesAccountDetail = new SysUserCoursesAccountDetail();
+            sysUserCoursesAccountDetail.setUserId(userId);
+            sysUserCoursesAccountDetail.setAmount(decimal);
+            sysUserCoursesAccountDetail.setBalance(balance);
+            sysUserCoursesAccountDetail.setDescription(description + "-" + sysUser.getId());
+            sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+            sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public boolean transferCourseBalanceToBalance(Integer userId, BigDecimal money) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (money == null || money.compareTo(BigDecimal.ZERO) <= 0) {
+            throw new BizException("充值金额必须大于0");
+        }
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+            throw new BizException("账户不可用");
+        }
+
+        if (money.compareTo(cashAccount.getCourseBalance()) > 0) {
+            throw new BizException("充值金额不能大于课程余额");
+        }
+
+        Date date = new Date();
+
+        SysUserCashAccountDetail detail = new SysUserCashAccountDetail();
+        detail.setAmount(money);
+        detail.setBalance(cashAccount.getBalance().add(money));
+        detail.setDescription("课程余额转账");
+        detail.setComment("课程余额转账-"+sysUser.getId());
+        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(money));
+        cashAccount.setCourseBalance(cashAccount.getCourseBalance().subtract(money));
+        cashAccount.setUpdateTime(date);
+
+        sysUserCashAccountDao.update(cashAccount);
+
+        SysUserCoursesAccountDetail sysUserCoursesAccountDetail = new SysUserCoursesAccountDetail();
+        sysUserCoursesAccountDetail.setUserId(userId);
+        sysUserCoursesAccountDetail.setType(PlatformCashAccountDetailTypeEnum.FILL_ACCOUNT);
+        sysUserCoursesAccountDetail.setAmount(money.negate());
+        sysUserCoursesAccountDetail.setBalance(cashAccount.getCourseBalance());
+        sysUserCoursesAccountDetail.setDescription("课程余额转账");
+        sysUserCoursesAccountDetail.setComment("课程余额转账-"+sysUser.getId());
+        sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+        sysUserCoursesAccountDetail.setUpdateTime(date);
+        sysUserCoursesAccountDetail.setCreateTime(date);
+        sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
+
+        return true;
+    }
+
+    @Override
+    public SysUserCashAccount getLocked(Integer userId) {
+        return sysUserCashAccountDao.getLocked(userId);
+    }
 
 }

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

@@ -246,7 +246,24 @@
 		<if test="days!=null">
 			AND cs.class_date_ &lt;= DATE_FORMAT(DATE_ADD( NOW( ), INTERVAL - #{days} DAY ),'%Y-%m-%d')
 		</if>
-		AND cs.type_ IN ('VIP')
+		AND cs.type_ = #{groupType}
+		AND csts.settlement_time_ IS NULL
+		AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
+    </select>
+    <select id="findTeacherCourseSalaryNoSettlement" resultMap="CourseScheduleTeacherSalary">
+		SELECT
+		cs.class_date_,
+		csts.*
+		FROM
+		course_schedule_teacher_salary csts
+		LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
+		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
+		LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+		WHERE ta.id_ IS NOT NULL AND sa.id_ IS NOT NULL
+		<if test="days!=null">
+			AND cs.class_date_ &lt;= DATE_FORMAT(DATE_ADD( NOW( ), INTERVAL - #{days} DAY ),'%Y-%m-%d')
+		</if>
+		AND cs.type_ = #{groupType}
 		AND csts.settlement_time_ IS NULL
 		AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
     </select>
@@ -381,8 +398,7 @@
 	</update>
     <update id="batchUpdateTeacher">
 		UPDATE course_schedule_teacher_salary csts SET csts.user_id_ = #{teacherId},csts.update_time_ = NOW(),
-		csts.expect_salary_ =
-		(SELECT main_teacher_salary_ FROM teacher_default_practice_group_salary WHERE user_id_ = #{teacherId} LIMIT 1)
+		csts.expect_salary_ = (SELECT main_teacher_salary_ FROM teacher_default_practice_group_salary WHERE user_id_ = #{teacherId} LIMIT 1)
 		WHERE csts.course_schedule_id_ IN
 		<foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
 			#{courseScheduleId}

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

@@ -61,6 +61,9 @@
 			<if test="memo!=null">
 				memo_=#{memo},
 			</if>
+			<if test="name!=null">
+				name_=#{name},
+			</if>
 			<if test="groupStatus!=null">
 				group_status_=#{groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -29,6 +29,10 @@ public interface TaskRemoteService {
 	// vip课课酬结算
 	public void vipGroupTeacherSalarySettlement();
 
+	@GetMapping("task/practiceTeacherSalarySettlement")
+	// 陪练课课酬结算
+	public void practiceTeacherSalarySettlement();
+
 	@GetMapping("task/musicGroupTeacherSalarySettlement")
 	void MusicGroupTeacherSalarySettlement();
 

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -37,6 +37,11 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	}
 
 	@Override
+	public void practiceTeacherSalarySettlement() {
+		logger.info("网管课课酬结算的服务调用失败");
+	}
+
+	@Override
 	public void MusicGroupTeacherSalarySettlement() {
 		logger.info("乐团课课酬结算的服务调用失败");
 	}

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/PracticeTeacherSalarySettlementTask.java

@@ -0,0 +1,19 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PracticeTeacherSalarySettlementTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.practiceTeacherSalarySettlement();
+	}
+}

+ 0 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java

@@ -11,7 +11,6 @@ import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.biz.service.TeacherService;
 import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;

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

@@ -119,7 +119,7 @@ public class CourseScheduleController extends BaseController {
         return succeed();
     }
 
-    @ApiOperation(value = "批量新排课")
+    @ApiOperation(value = "批量新排课")
     @PostMapping("/batchUpdateCourseSchedule/{musicGroupID}")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchUpdateCourseSchedule')")
     public Object batchUpdateCourseSchedule(@RequestBody List<CourseSchedule> courseSchedules,

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

@@ -47,8 +47,8 @@ public class SysUserCashAccountController extends BaseController {
 	@ApiOperation(value = "将课程余额转入到可用余额")
 	@PostMapping("/transferCourseBalanceToBalance")
 	@PreAuthorize("@pcs.hasPermissions('userCashAccount/transferCourseBalanceToBalance')")
-	public Object transferCourseBalanceToBalance(Integer userId) {
-		sysUserCashAccountService.transferCourseBalanceToBalance(userId);
+	public Object transferCourseBalanceToBalance(Integer userId,BigDecimal money) {
+		sysUserCashAccountService.transferCourseBalanceToBalance(userId,money);
 		return succeed();
 	}
 

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

@@ -60,6 +60,12 @@ public class TaskController extends BaseController {
 		courseScheduleTeacherSalaryService.teacherSalarySettlement();
 	}
 
+	@GetMapping("/practiceTeacherSalarySettlement")
+	// 陪练课课酬结算
+	public void practiceTeacherSalarySettlement() {
+		courseScheduleTeacherSalaryService.practiceTeacherSalarySettlement();
+	}
+
 	// 乐团课课酬结算
 	@GetMapping("/musicGroupTeacherSalarySettlement")
 	public void musicGroupTeacherSalarySettlement() {