ソースを参照

Merge remote-tracking branch 'origin/master'

Joburgess 4 年 前
コミット
356bfcf145
31 ファイル変更384 行追加92 行削除
  1. 0 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java
  2. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentStudentCourseDetailDao.java
  3. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentRouteOrderDao.java
  4. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java
  5. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OutOrderInfoDto.java
  6. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleTeacherSalary.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java
  8. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java
  9. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMessageService.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherSalaryModifyLogService.java
  11. 59 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  12. 34 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  13. 8 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java
  14. 0 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  15. 13 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherSalaryModifyLogServiceImpl.java
  16. 2 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  17. 0 5
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  18. 1 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  19. 1 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  20. 1 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml
  21. 28 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml
  22. 3 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  23. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  24. 0 11
      mec-client-api/src/main/java/com/ym/mec/im/ImFeignService.java
  25. 14 2
      mec-im/src/main/java/com/ym/controller/RoomController.java
  26. 15 5
      mec-im/src/main/java/com/ym/controller/SystemController.java
  27. 116 0
      mec-im/src/main/java/com/ym/pojo/ImMsg.java
  28. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  29. 6 2
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java
  30. 8 1
      mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentRouteOrderController.java
  31. 2 1
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherSalaryModifyLogController.java

+ 0 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java

@@ -458,12 +458,6 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	List<CourseTeacherSalaryStatisticsDto> getTeacherMonthSalarys(@Param("teacherId") Integer teacherId,
 																  @Param("year") String year);
 
-	/**
-	 * 调整已结算的课酬
-	 * @param modifyLog
-	 */
-    void updateSalary(@Param("modifyLog") TeacherSalaryModifyLog modifyLog);
-
     /**
      * @describe 统计指定月份已开启课酬确认的数量
      * @author Joburgess

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentStudentCourseDetailDao.java

@@ -6,6 +6,7 @@ import java.util.List;
 
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
 import com.ym.mec.common.dal.BaseDAO;
+
 import org.apache.ibatis.annotations.Param;
 
 public interface MusicGroupPaymentStudentCourseDetailDao extends BaseDAO<Long, MusicGroupPaymentStudentCourseDetail> {
@@ -63,4 +64,25 @@ public interface MusicGroupPaymentStudentCourseDetailDao extends BaseDAO<Long, M
      * @return
      */
     int deleteByUserIdAndMusicGroupId(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);
+    
+    /**
+     * 根据缴费编号删除信息
+     * @param musicGroupPaymentCalenderId
+     * @return
+     */
+    int deleteByMusicGroupPaymentCalenderId(Long musicGroupPaymentCalenderId);
+
+    /**
+     * 删除信息
+     * @param musicGroupPaymentCalenderDetailIdList
+     * @return
+     */
+    int deleteByMusicGroupPaymentCalenderDetailId(List<Long> musicGroupPaymentCalenderDetailIdList);
+    
+    /**
+     * 查询对象
+     * @param musicGroupPaymentCalenderDetailIdList
+     * @return
+     */
+    List<MusicGroupPaymentStudentCourseDetail> queryByMusicGroupPaymentStudentCourseDetailId(List<Long> musicGroupPaymentCalenderDetailIdList);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentRouteOrderDao.java

@@ -78,4 +78,11 @@ public interface StudentPaymentRouteOrderDao extends BaseDAO<Long, StudentPaymen
      * @return
      */
     BigDecimal sumAmountByCalenderId(Long calenderId);
+
+    /**
+     * 更换订单号获取
+     * @param orderNo
+     * @return
+     */
+    StudentPaymentRouteOrder getByOrderNo(String orderNo);
 }

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

@@ -79,11 +79,22 @@ public class CourseScheduleDto extends CourseSchedule {
     //申述内容
     private String complaintsContent;
 
+    //申述凭证
+    private String url;
+
     //处理结果
     private String disposeContent;
 
     private int isNew;
 
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
     public Integer getSignInStatus() {
         return signInStatus;
     }

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

@@ -17,6 +17,9 @@ public class OutOrderInfoDto {
     @ApiModelProperty(value = "销售收入",required = true)
     private BigDecimal goodsAmount = BigDecimal.ZERO;
 
+    @ApiModelProperty(value = "缴费单号",required = true)
+    private Long calenderId;
+
     private List<SellOrder> sellOrders;
 
     public List<SellOrder> getSellOrders() {
@@ -50,4 +53,12 @@ public class OutOrderInfoDto {
     public void setStudentPaymentOrder(com.ym.mec.biz.dal.entity.StudentPaymentOrder studentPaymentOrder) {
         StudentPaymentOrder = studentPaymentOrder;
     }
+
+    public Long getCalenderId() {
+        return calenderId;
+    }
+
+    public void setCalenderId(Long calenderId) {
+        this.calenderId = calenderId;
+    }
 }

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

@@ -35,7 +35,7 @@ public class CourseScheduleTeacherSalary {
 	private String userName;
 	
 	/** 预计薪水 */
-	private java.math.BigDecimal expectSalary;
+	private java.math.BigDecimal expectSalary = BigDecimal.ZERO;
 	
 	/**  */
 	private java.util.Date createTime;
@@ -44,13 +44,13 @@ public class CourseScheduleTeacherSalary {
 	private java.util.Date updateTime;
 	
 	/** 补贴 */
-	private java.math.BigDecimal subsidy;
+	private java.math.BigDecimal subsidy = BigDecimal.ZERO;
 	
 	/** 实际薪水 */
-	private java.math.BigDecimal actualSalary;
+	private java.math.BigDecimal actualSalary = BigDecimal.ZERO;
 
 	/** 课酬结算时计算的课酬 */
-	private java.math.BigDecimal teacherActualSalary;
+	private java.math.BigDecimal teacherActualSalary = BigDecimal.ZERO;
 	
 	/** 结算时间 */
 	private java.util.Date settlementTime;
@@ -59,7 +59,7 @@ public class CourseScheduleTeacherSalary {
 	
 	private CourseSchedule courseSchedule = new CourseSchedule();
 
-	private BigDecimal reduceSalary;
+	private BigDecimal reduceSalary = BigDecimal.ZERO;
 
 	private TeacherSalaryConfirmStatus confirmStatus;
 

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java

@@ -511,6 +511,16 @@ public class MusicGroup {
 		this.isClassroomLessons = isClassroomLessons;
 	}
 
+	public boolean getIsClassroomLessons() {
+		return isClassroomLessons;
+	}
+
+	public void setIsClassroomLessons(boolean isClassroomLessons) {
+		this.isClassroomLessons = isClassroomLessons;
+	}
+
+
+
 	public String getMemo() {
 		return memo;
 	}

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java

@@ -67,7 +67,7 @@ public interface MusicGroupPaymentCalenderDetailService extends BaseService<Long
 
     /**
      * 批量删除缴费信息
-     * @param musicGroupPaymentCalenderIds
+     * @param musicGroupPaymentCalenderDetailIds
      */
-    void batchDel(String musicGroupPaymentCalenderIds);
+    void batchDel(String musicGroupPaymentCalenderDetailIds);
 }

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/SysMessageService.java

@@ -29,7 +29,7 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	boolean batchSeoMessage(Set<Integer> userIds, MessageTypeEnum messageType,String memo, Object... args);
 
 	/**
-	 * 推送im文本消息,包换调整链接
+	 * 推送im文本消息,包含跳转链接
 	 * @param senderId
 	 * @param messageType
 	 * @return
@@ -37,7 +37,7 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	void batchSendImMessage(MessageTypeEnum messageType,String senderId,String extra, String[] targetIds,String url, Object... args);
 
 	/**
-	 * 推送im文本消息,包换调整链接
+	 * 推送im文本消息,包含跳转链接
 	 * @param senderId
 	 * @param messageType
 	 * @return

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

@@ -9,5 +9,5 @@ public interface TeacherSalaryModifyLogService extends BaseService<Long, Teacher
      * @param modifyLog
      * @return
      */
-    Object add(TeacherSalaryModifyLog modifyLog);
+    void add(TeacherSalaryModifyLog modifyLog);
 }

+ 59 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java

@@ -1,10 +1,39 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.dao.*;
+import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentStudentCourseDetailDao;
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.FeeStudentDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderDetailService;
@@ -16,18 +45,6 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
-import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
-
 @Service
 public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentCalenderDetail>  implements MusicGroupPaymentCalenderDetailService {
 	
@@ -428,15 +445,39 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void batchDel(String musicGroupPaymentCalenderIds) {
-		List<MusicGroupPaymentCalenderDetail> details = musicGroupPaymentCalenderDetailDao.queryListByIds(musicGroupPaymentCalenderIds);
+	public void batchDel(String musicGroupPaymentCalenderDetailIds) {
+		List<MusicGroupPaymentCalenderDetail> details = musicGroupPaymentCalenderDetailDao.queryListByIds(musicGroupPaymentCalenderDetailIds);
 		if(details == null || details.size() == 0){
 			throw new BizException("删除失败: 数据不可为空");
 		}
-		long count = details.stream().filter(e -> e.getPaymentStatus() == PAID_COMPLETED).count();
+		//是否已缴费
+		long count = details.stream().filter(e -> e.getPaymentStatus() != NON_PAYMENT).count();
 		if(count > 0){
 			throw new BizException("删除失败: 存在已缴费的学员");
 		}
-		musicGroupPaymentCalenderDetailDao.batchDel(musicGroupPaymentCalenderIds);
+		List<Long> musicGroupPaymentCalenderDetailIdList = new ArrayList<Long>();
+		for(String s : musicGroupPaymentCalenderDetailIds.split(",")){
+			musicGroupPaymentCalenderDetailIdList.add(Long.parseLong(s));
+		}
+		//是否已排课
+		List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = musicGroupPaymentStudentCourseDetailDao.queryByMusicGroupPaymentStudentCourseDetailId(musicGroupPaymentCalenderDetailIdList);
+		count = musicGroupPaymentStudentCourseDetailList.stream().filter(e -> e.getUsedCourseMinutes() > 0).count();
+		if(count > 0){
+			throw new BizException("删除失败:存在已排课的学员");
+		}
+		
+		Long musicGroupPaymentCalenderId = details.get(0).getMusicGroupPaymentCalenderId();
+		MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderDao.get(musicGroupPaymentCalenderId);
+		
+		if(musicGroupPaymentCalender == null){
+			throw new BizException("查询缴费项目失败[{}]", musicGroupPaymentCalender);
+		}
+		int currentNum = musicGroupPaymentCalender.getExpectNum() - details.size();
+		musicGroupPaymentCalender.setExpectNum(currentNum < 0 ? 0 : currentNum);
+		musicGroupPaymentCalender.setUpdateTime(new Date());
+		musicGroupPaymentCalenderDao.update(musicGroupPaymentCalender);
+		
+		musicGroupPaymentCalenderDetailDao.batchDel(musicGroupPaymentCalenderDetailIds);
+		musicGroupPaymentStudentCourseDetailDao.deleteByMusicGroupPaymentCalenderDetailId(musicGroupPaymentCalenderDetailIdList);
 	}
 }

+ 34 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -259,9 +259,15 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 						if (defaultUnitPrice == null) {
 							throw new BizException("请先设置分部课程类型单价");
 						}
-						if (courseSettings.getCourseCurrentPrice()
-								.divide(new BigDecimal(courseSettings.getCourseTotalMinuties()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN)
-								.compareTo(defaultUnitPrice.getUnitPrice()) != 0) {
+						if (courseSettings.getCourseTotalMinuties() != 0) {
+							if (courseSettings
+									.getCourseCurrentPrice()
+									.divide(new BigDecimal(courseSettings.getCourseTotalMinuties()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN)
+									.compareTo(defaultUnitPrice.getUnitPrice()) != 0) {
+								status = AUDITING;
+								break;
+							}
+						} else {
 							status = AUDITING;
 							break;
 						}
@@ -564,9 +570,14 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 					if (defaultUnitPrice == null) {
 						throw new BizException("请先设置分部课程类型单价");
 					}
-					if (courseSettings.getCourseCurrentPrice()
-							.divide(new BigDecimal(courseSettings.getCourseTotalMinuties()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN)
-							.compareTo(defaultUnitPrice.getUnitPrice()) != 0) {
+					if (courseSettings.getCourseTotalMinuties() != 0) {
+						if (courseSettings.getCourseCurrentPrice()
+								.divide(new BigDecimal(courseSettings.getCourseTotalMinuties()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN)
+								.compareTo(defaultUnitPrice.getUnitPrice()) != 0) {
+							status = AUDITING;
+							break;
+						}
+					} else {
 						status = AUDITING;
 						break;
 					}
@@ -1210,12 +1221,17 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		if (id == null) {
 			throw new BizException("参数校验失败");
 		}
-		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(id);
+		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.getForLock(id);
 		if (calender == null) {
 			throw new BizException("缴费信息不存在");
 		}
-		if (calender.getStatus() != PaymentCalenderStatusEnum.NO || calender.getStatus() != PaymentCalenderStatusEnum.REJECT) {
-			throw new BizException("删除失败,只有“拒绝”或“未开启缴费”状态才能删除");
+		if (calender.getStatus() != PaymentCalenderStatusEnum.AUDITING && calender.getStatus() != PaymentCalenderStatusEnum.NO
+				&& calender.getStatus() != PaymentCalenderStatusEnum.REJECT) {
+			throw new BizException("删除失败,只有[审核中]、[拒绝]或[未开启缴费]状态才能删除");
+		}
+		MusicGroupStudentClassAdjust byBatchNo = musicGroupStudentClassAdjustDao.findByBatchNo(calender.getBatchNo());
+		if(byBatchNo != null){
+			throw new BizException("删除失败,班级调整的缴费项目不允许删除");
 		}
 
 		List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = musicGroupPaymentCalenderDetailDao.queryByCalenderId(id,null);
@@ -1226,10 +1242,19 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			if (paidList.size() > 0) {
 				throw new BizException("存在已缴费的学生不能删除");
 			}
+			
+			List<Long> calenderDetailIdList = musicGroupPaymentCalenderDetailList.stream().map(cd -> cd.getId()).collect(Collectors.toList());
+			//是否已排课
+			List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = musicGroupPaymentStudentCourseDetailDao.queryByMusicGroupPaymentStudentCourseDetailId(calenderDetailIdList);
+			long count = musicGroupPaymentStudentCourseDetailList.stream().filter(e -> e.getUsedCourseMinutes() > 0).count();
+			if(count > 0){
+				throw new BizException("存在已排课的学员");
+			}
 		}
 
 		musicGroupPaymentCalenderDao.delete(id);
 		musicGroupPaymentCalenderDetailDao.deleteByCalenderId(id);
+		musicGroupPaymentStudentCourseDetailDao.deleteByMusicGroupPaymentCalenderId(id);
 		
 		List<Long> calenderIds = new ArrayList<Long>();
 		calenderIds.add(id);

+ 8 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java

@@ -132,8 +132,14 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
     public StudentPaymentRouteOrder addOutOrder(StudentPaymentRouteOrder studentPaymentRouteOrder) {
         Map<String, Object> params = new HashMap<>();
         params.put("transNo", studentPaymentRouteOrder.getTransNo());
-        if(studentPaymentRouteOrderDao.queryAuditCount(params) >0){
-            throw new  BizException("流水号不能重复");
+        if (studentPaymentRouteOrderDao.queryAuditCount(params) > 0) {
+            throw new BizException("流水号不能重复");
+        }
+        if (studentPaymentRouteOrder.getCalenderId() != null) {
+            MusicGroupPaymentCalender musicGroupPaymentCalender = musicGroupPaymentCalenderDao.get(studentPaymentRouteOrder.getCalenderId());
+            if (musicGroupPaymentCalender == null || !musicGroupPaymentCalender.getPayUserType().equals(MusicGroupPaymentCalender.PayUserType.SCHOOL)) {
+                throw new BizException("学校缴费单号不存在,请核查");
+            }
         }
         Date nowDate = new Date();
         String orderNo = idGeneratorService.generatorId("payment") + "";

+ 0 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -214,17 +214,6 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		imFeignService.groupSend(groupMessage);
 	}
 
-	/*@Override
-	public void batchSendImPlayMidiMessage(String senderId,String roomId, String content) {
-		ImGroupMessage groupMessage = new ImGroupMessage();
-		privateMessage.setObjectName("DY:PlayMidiMessage");
-		groupMessage.setTargetId(roomId.split(","));
-		groupMessage.setSenderId(senderId);
-		groupMessage.setContent(new ImPlayMidiMessage(content,null));
-		groupMessage.setType("DY:PlayMidiMessage");
-		imFeignService.privateSendCustom(groupMessage);
-	}*/
-
 	@Override
 	public void sendPrivateMessage(String studentId, String content) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();

+ 13 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherSalaryModifyLogServiceImpl.java

@@ -34,18 +34,25 @@ public class TeacherSalaryModifyLogServiceImpl extends BaseServiceImpl<Long, Tea
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public Object add(TeacherSalaryModifyLog modifyLog) {
+	public void add(TeacherSalaryModifyLog modifyLog) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser == null) {
 			throw new BizException("用户信息获取失败");
 		}
 		//获取之前的课酬信息
 		CourseScheduleTeacherSalary salary = courseScheduleTeacherSalaryDao.queryByCourseScheduleIdAndUserId(modifyLog.getCourseScheduleId(), modifyLog.getTeacherId());
-		courseScheduleTeacherSalaryDao.updateSalary(modifyLog);
-		//修改教师课酬
-		modifyLog.setPreExpectSalary(salary.getActualSalary());
-		modifyLog.setPreReduceSalary(salary.getReduceSalary()==null? BigDecimal.ZERO:salary.getReduceSalary());
+		if(modifyLog.getCurrentExpectSalary().compareTo(modifyLog.getCurrentReduceSalary()) < 0){
+			throw new BizException("应发金额不应小于扣款金额");
+		}
+		modifyLog.setPreExpectSalary(salary.getExpectSalary());
+		modifyLog.setPreReduceSalary(salary.getReduceSalary());
 		modifyLog.setOperatorId(sysUser.getId());
-		return teacherSalaryModifyLogDao.insert(modifyLog);
+		teacherSalaryModifyLogDao.insert(modifyLog);
+		//修改教师课酬
+		salary.setExpectSalary(modifyLog.getCurrentExpectSalary());
+		salary.setReduceSalary(modifyLog.getCurrentReduceSalary());
+		salary.setActualSalary(salary.getExpectSalary().subtract(salary.getReduceSalary()));
+		salary.setMemo(modifyLog.getMemo());
+		courseScheduleTeacherSalaryDao.update(salary);
 	}
 }

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

@@ -72,6 +72,7 @@
         <result column="is_complaints_" property="isComplaints"/>
         <result column="complaints_status_" property="complaintsStatus"/>
         <result column="complaints_content_" property="complaintsContent"/>
+        <result column="url_" property="url"/>
         <result column="dispose_content_" property="disposeContent"/>
         <result column="seal_class_id_" property="sealClassId"/>
         <result column="total_student_num_" property="totalStudentNum"/>
@@ -744,6 +745,7 @@
                ta.sign_in_time_,
                ta.complaints_status_,
                ta.complaints_content_,
+               ta.url_,
                ta.dispose_content_,
                cs.teach_mode_
         FROM course_schedule_teacher_salary csts

+ 0 - 5
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -460,11 +460,6 @@
 		AND csts.teacher_role_ = 'BISHOP'
 	</update>
 
-    <update id="updateSalary" parameterType="com.ym.mec.biz.dal.entity.TeacherSalaryModifyLog">
-		UPDATE course_schedule_teacher_salary SET actual_salary_ = #{modifyLog.currentExpectSalary},
-		reduce_salary = #{modifyLog.currentReduceSalary},update_time_ = NOW(),memo_ = #{modifyLog.memo}
-		WHERE course_schedule_id_ = #{modifyLog.courseScheduleId} AND user_id_ = #{modifyLog.teacherId}
-	</update>
 	<update id="updateTeacherSalaryConfirmStatus">
 		UPDATE course_schedule_teacher_salary SET confirm_status_=#{confirmStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 		WHERE group_type_!='COMM'

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

@@ -38,6 +38,7 @@
         <result column="payment_valid_start_date_" property="paymentValidStartDate"/>
         <result column="payment_valid_end_date_" property="paymentValidEndDate"/>
         <result column="payment_pattern_" property="paymentPattern"/>
+        <result column="is_classroom_lessons_" property="isClassroomLessons"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->

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

@@ -188,7 +188,7 @@
 		DELETE FROM music_group_payment_calender_detail WHERE id_ = #{id}
 	</delete>
 	<delete id="batchDel">
-		DELETE FROM music_group_payment_calender_detail WHERE FIND_IN_SET(id_,#{musicGroupPaymentCalenderIds})
+		DELETE FROM music_group_payment_calender_detail WHERE FIND_IN_SET(id_,#{musicGroupPaymentCalenderIdDetails})
 	</delete>
 	<delete id="deleteByUserIdAndMusicGroupId">
 		DELETE FROM music_group_payment_calender_detail

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

@@ -433,6 +433,7 @@
     </resultMap>
     <sql id="MusicGroupPaymentCalenderAuditDtoSql">
         <where>
+                mgpc.batch_no_ IS NOT NULL
             <if test="paymentType != null">
                 AND mgpc.payment_type_ = #{paymentType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>

+ 28 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml

@@ -121,6 +121,34 @@
         WHERE id_ = #{id}
     </delete>
 
+    <!-- 根据主键删除一条记录 -->
+    <delete id="deleteByMusicGroupPaymentCalenderId">
+        DELETE FROM music_group_payment_student_course_detail
+        WHERE music_group_payment_calender_id_ = #{musicGroupPaymentCalenderId}
+    </delete>
+    
+    <delete id="deleteByMusicGroupPaymentCalenderDetailId">
+        DELETE FROM music_group_payment_student_course_detail
+        <where>
+        	music_group_payment_calender_detail_id_ in    
+		    <foreach item="item" collection="list" separator="," open="(" close=")" index="">    
+		      #{item}    
+		    </foreach>
+        </where>
+    </delete>
+
+    <!-- 分页查询 -->
+    <select id="queryByMusicGroupPaymentStudentCourseDetailId" resultMap="MusicGroupPaymentStudentCourseDetail"
+            parameterType="map">
+        SELECT * FROM music_group_payment_student_course_detail 
+        <where>
+        	music_group_payment_calender_detail_id_ in    
+		    <foreach item="item" collection="list" separator="," open="(" close=")" index="">    
+		      #{item}    
+		    </foreach>
+        </where>
+    </select>
+
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="MusicGroupPaymentStudentCourseDetail"
             parameterType="map">

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

@@ -380,5 +380,8 @@
     <select id="sumAmountByCalenderId" resultType="java.math.BigDecimal">
         SELECT IF(SUM(route_amount_) IS NULL,0, SUM(route_amount_)) FROM student_payment_route_order WHERE calender_id_ = #{calenderId} AND audit_status_='PASS'
     </select>
+    <select id="getByOrderNo" resultMap="StudentPaymentRouteOrder">
+        SELECT * FROM student_payment_route_order WHERE order_no_ = #{orderNo} LIMIT 1
+    </select>
 
 </mapper>

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

@@ -91,7 +91,7 @@
     </select>
 
     <select id="lockWithUserAndMusic" resultMap="StudentRegistration">
-        SELECT * FROM student_registration WHERE user_id_ = #{userId} AND music_group_id_=#{musicGroupId} FOR UPDATE
+        SELECT * FROM student_registration WHERE user_id_ = #{userId} AND music_group_id_=#{musicGroupId} AND music_group_status_ != 'QUIT' FOR UPDATE
     </select>
 
     <!-- 全查询 -->

+ 0 - 11
mec-client-api/src/main/java/com/ym/mec/im/ImFeignService.java

@@ -97,15 +97,4 @@ public interface ImFeignService {
 
 	@PostMapping(value = "group/send")
 	Object groupSend(@RequestBody ImGroupMessage imGroupMessage);
-
-	/**
-	 * 发送群组自定义消息
-	 * @param groupMessage
-	 * @return
-	 */
-//	@PostMapping(value = "private/sendCustom")
-	//body模板
-	//{"senderId":"325","targetId":[1094986],"objectName":"RC:TxtMsg",
-	// "content":{"content":"www.baidu.com"}}
-//	Object privateSendCustom(@RequestBody ImGroupMessage groupMessage);
 }

+ 14 - 2
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -34,8 +34,20 @@ public class RoomController{
     }
 
     @RequestMapping(value = "/statusImMsg", method = RequestMethod.POST)
-    public Object statusImMsg(@RequestBody String body){
-        log.info("statusImMsg body{}:",body);
+    public Object statusImMsg(ImMsg imMsg){
+//        log.info("statusImMsg body{}:",body);
+        String str = "timestamp=1608175805527" +
+                "&signTimestamp=1608175805527" +
+                "&nonce=1816421725" +
+                "&signature=fa06f0d300687919c8af009d4ad5f1923d753648&appKey=c9kqb3rdc451j" +
+                "&channelType=PERSON&fromUserId=325&toUserId=2109272" +
+                "&msgTimestamp=1608175805490" +
+                "&objectName=RC%3ATxtMsg" +
+                "&content=%7B%22content%22%3A%22%E5%A5%BD%22%7D" +
+                "&sensitiveType=0" +
+                "&source=iOS" +
+                "&msgUID=BMDQ-VM8C-J785-8785:";
+
         return new BaseResponse<>();
     }
 

+ 15 - 5
mec-im/src/main/java/com/ym/controller/SystemController.java

@@ -14,9 +14,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
-/**
- * Created by weiqinxiao on 2019/2/25.
- */
+import java.lang.reflect.Array;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 @RestController
 @RequestMapping("/system")
 public class SystemController {
@@ -30,10 +33,17 @@ public class SystemController {
         ImTxtMessage content = (ImTxtMessage)imSystemMessage.getContent();
         TxtMessage txtMessage = new TxtMessage(content.getContent(),content.getExtra());
         systemMessage.setContent(txtMessage);
-        systemMessage.setTargetId(imSystemMessage.getTargetId());
         systemMessage.setSenderId(imSystemMessage.getSenderId());
         systemMessage.setObjectName(imSystemMessage.getObjectName());
-        return messageService.systemSend(systemMessage);
+        String[] targetId = imSystemMessage.getTargetId();
+        long i = Math.round(targetId.length / 100d);
+        for (int j = 0; j < i; j++) {
+            List<String> collect = Arrays.stream(targetId).skip(j * 100).limit(100).collect(Collectors.toList());
+            String[] objects = collect.toArray(new String[100]);
+            systemMessage.setTargetId(objects);
+            messageService.systemSend(systemMessage);
+        }
+        return null;
     }
 
     @RequestMapping(value = "/broadcast", method = RequestMethod.POST)

+ 116 - 0
mec-im/src/main/java/com/ym/pojo/ImMsg.java

@@ -0,0 +1,116 @@
+package com.ym.pojo;
+
+import java.util.List;
+
+//融云聊天记录
+public class ImMsg {
+    //fromUserId	String	发送用户 Id。
+    //toUserId	String	目标 Id,即为客户端 targetId,根据会话类型 channelType 的不同,可能为二人会话 Id、群聊 Id、聊天室 Id、客服 Id 等。
+    //objectName	String	消息类型,文本消息 RC:TxtMsg 、 图片消息 RC:ImgMsg 、语音消息 RC:VcMsg 、图文消息 RC:ImgTextMsg 、位置消息 RC:LBSMsg 、添加联系人消息 RC:ContactNtf 、提示条通知消息 RC:InfoNtf 、资料通知消息 RC:ProfileNtf 、通用命令通知消息 RC:CmdNtf ,详细请参见消息类型说明文档。
+    //content	String	发送消息内容,参考融云消息类型说明
+    //channelType	String	会话类型,二人会话是 PERSON 、讨论组会话是 PERSONS 、群组会话是 GROUP 、聊天室会话是 TEMPGROUP 、客服会话是 CUSTOMERSERVICE 、 系统通知是 NOTIFY 、应用公众服务是 MC 、公众服务是 MP。对应客户端 SDK 中 ConversationType 类型,二人会话是 1 、讨论组会话是 2 、群组会话是 3 、聊天室会话是 4 、客服会话是 5 、 系统通知是 6 、应用公众服务是 7 、公众服务是 8。
+    //msgTimestamp	String	服务端收到客户端发送消息时的服务器时间(1970年到现在的毫秒数)。
+    //msgUID	String	可通过 msgUID 确定消息唯一。
+    //sensitiveType	Int	消息中是否含有敏感词标识,0 为不含有敏感词,1 为含有屏蔽敏感词,2 为含有替换敏感词。消息路由功能默认含有屏蔽敏感词的消息不进行路由,可提交工单开通含有敏感词的消息路由功能,未开通情况下 sensitiveType 值默认为 0 不代表任何意义。开通后可通过该属性判断消息中是否含有敏感词。目前支持单聊、群聊、聊天室会话类型,其他会话类型默认为 0 ,开通后含有屏蔽敏感词的消息也不会进行下发,只会进行消息路由。
+    //source	String	标识消息的发送源头,包括:iOS、Android、Websocket、MiniProgram(小程序)、Server(通过 Server API 发送,需要开通 Server API 发送消息进行消息路由功能)。目前支持单聊、群聊会话类型,其他会话类型为空。
+    //groupUserIds	String[]
+    private String fromUserId;
+
+    private String toUserId;
+
+    private String objectName;
+
+    private String content;
+
+    private String channelType;
+
+    private String msgTimestamp;
+
+    private String msgUID;
+
+    private int sensitiveType;
+
+    private String source;
+
+    private List<String> groupUserIds;
+
+    public String getFromUserId() {
+        return fromUserId;
+    }
+
+    public void setFromUserId(String fromUserId) {
+        this.fromUserId = fromUserId;
+    }
+
+    public String getToUserId() {
+        return toUserId;
+    }
+
+    public void setToUserId(String toUserId) {
+        this.toUserId = toUserId;
+    }
+
+    public String getObjectName() {
+        return objectName;
+    }
+
+    public void setObjectName(String objectName) {
+        this.objectName = objectName;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getChannelType() {
+        return channelType;
+    }
+
+    public void setChannelType(String channelType) {
+        this.channelType = channelType;
+    }
+
+    public String getMsgTimestamp() {
+        return msgTimestamp;
+    }
+
+    public void setMsgTimestamp(String msgTimestamp) {
+        this.msgTimestamp = msgTimestamp;
+    }
+
+    public String getMsgUID() {
+        return msgUID;
+    }
+
+    public void setMsgUID(String msgUID) {
+        this.msgUID = msgUID;
+    }
+
+    public int getSensitiveType() {
+        return sensitiveType;
+    }
+
+    public void setSensitiveType(int sensitiveType) {
+        this.sensitiveType = sensitiveType;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public List<String> getGroupUserIds() {
+        return groupUserIds;
+    }
+
+    public void setGroupUserIds(List<String> groupUserIds) {
+        this.groupUserIds = groupUserIds;
+    }
+}

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

@@ -545,7 +545,7 @@ public class ExportController extends BaseController {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课时编号", "老师编号", "老师姓名", "老师分部", "工作类别",
                     "课程分部", "课程组编号", "课程班名称", "乐团模式", "vip活动名称", "Vip课程类型", "阶梯奖励名称", "线上课/线下课", "线上课单价", "线下课单价",
                     "课程类别", "课时时长", "实际上课时长", "上课日期",
-                    "上课时间", "教师签到状态", "教师签退状态", "教师签到时间", "教师签退时间", "申诉处理状态", "处理意见",
+                    "上课时间", "教师签到状态", "教师签退状态", "教师签到时间", "教师签退时间", "考勤申诉处理状态", "处理意见",
                     "主辅", "上课地点", "应到学员", "实际到课学员", "学员签到时间", "学员签退时间", "课时课酬", "阶梯奖励", "扣款原因"}, new String[]{
                     "courseScheduleId", "teacherId", "teacherName", "teacherOrganName", "jobType",
                     "courseScheduleOrganName", "groupId", "groupName", "changeType", "vipActiveName", "vipCategoryName", "activeName", "teachMode", "onlineClassesUnitPrice", "offlineClassesUnitPrice",

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

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation;
 
 import java.math.BigDecimal;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -69,8 +70,11 @@ public class MusicGroupPaymentCalenderDetailController extends BaseController {
     @ApiOperation(value = "批量删除缴费信息")
     @PostMapping("/batchDel")
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalenderDetail/batchDel')")
-    public Object batchDel(String musicGroupPaymentCalenderIds) {
-        musicGroupPaymentCalenderDetailService.batchDel(musicGroupPaymentCalenderIds);
+    public Object batchDel(String musicGroupPaymentCalenderDetailIds) {
+    	if(StringUtils.isBlank(musicGroupPaymentCalenderDetailIds)){
+    		return failed("请求参数错误");
+    	}
+        musicGroupPaymentCalenderDetailService.batchDel(musicGroupPaymentCalenderDetailIds);
         return succeed();
     }
 

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

@@ -1,5 +1,7 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -52,6 +54,8 @@ public class StudentPaymentRouteOrderController extends BaseController {
     private StudentPaymentOrderDao studentPaymentOrderDao;
     @Autowired
     private SellOrderDao sellOrderDao;
+    @Autowired
+    private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
 
     @ApiOperation(value = "财务订单列表")
     @GetMapping("/finance")
@@ -181,7 +185,10 @@ public class StudentPaymentRouteOrderController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('routeOrder/getOrderInfo')")
     public HttpResponseResult<OutOrderInfoDto> getOrderInfo(Long orderId) {
         OutOrderInfoDto outOrderInfoDto = new OutOrderInfoDto();
-        outOrderInfoDto.setStudentPaymentOrder(studentPaymentOrderDao.get(orderId));
+        StudentPaymentOrder order = studentPaymentOrderDao.get(orderId);
+        outOrderInfoDto.setStudentPaymentOrder(order);
+        StudentPaymentRouteOrder routeOrder = studentPaymentRouteOrderDao.getByOrderNo(order.getOrderNo());
+        outOrderInfoDto.setCalenderId(routeOrder.getCalenderId());
         List<SellOrder> sellOrders = sellOrderDao.getOrderSellOrder(orderId);
         BigDecimal goodsAmount = sellOrders.stream().map(SellOrder::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal serviceAmount = outOrderInfoDto.getStudentPaymentOrder().getActualAmount().subtract(goodsAmount);

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

@@ -22,6 +22,7 @@ public class TeacherSalaryModifyLogController extends BaseController {
     @RequestMapping("/add")
     @PreAuthorize("@pcs.hasPermissions('teacherSalaryModifyLog/add')")
     public Object add(TeacherSalaryModifyLog modifyLog){
-        return succeed(teacherSalaryModifyLogService.add(modifyLog));
+        teacherSalaryModifyLogService.add(modifyLog);
+        return succeed();
     }
 }