Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

zouxuan 4 lat temu
rodzic
commit
a58e7d038b
18 zmienionych plików z 443 dodań i 194 usunięć
  1. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java
  2. 6 6
      mec-biz/src/main/java/com/ym/mec/biz/event/listener/CourseEventListener.java
  3. 26 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  4. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  5. 43 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  6. 8 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  7. 1 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  8. 50 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  9. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  10. 228 94
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  11. 4 1
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  12. 1 1
      mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml
  13. 6 0
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  14. 7 2
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  15. 23 20
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  16. 24 19
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java
  17. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java
  18. 8 13
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java

@@ -29,7 +29,8 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
      * @param monday:
      * @return int
      */
-    int deleteByMonday(@Param("monday") String monday);
+    int deleteByMonday(@Param("monday") String monday,
+                       @Param("studentIds") List<Integer> studentIds);
 
     /**
      * @describe 删除指定学员的服务指标

+ 6 - 6
mec-biz/src/main/java/com/ym/mec/biz/event/listener/CourseEventListener.java

@@ -76,12 +76,12 @@ public class CourseEventListener {
 
 
         try{
-            List<CourseScheduleStudentPayment> cssps = courseScheduleStudentPaymentDao.findByCourseScheduleIds(new ArrayList<>(courseStatusChangeEvent.getCourseIds()));
-            if(CollectionUtils.isEmpty(cssps)){
-                return;
-            }
-            List<Integer> studentIds = cssps.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toList());
-            studentServeService.exercisesSituationStatistics2(null,studentIds);
+//            List<CourseScheduleStudentPayment> cssps = courseScheduleStudentPaymentDao.findByCourseScheduleIds(new ArrayList<>(courseStatusChangeEvent.getCourseIds()));
+//            if(CollectionUtils.isEmpty(cssps)){
+//                return;
+//            }
+//            List<Integer> studentIds = cssps.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toList());
+//            studentServeService.exercisesSituationStatistics2(null,studentIds);
         } finally {
             redisCache.delete("exercisesSituationStatistics2");
         }

+ 26 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -5271,6 +5271,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			}
 			if(Objects.isNull(courseMergeInfo.getClassGroupId())&&courseMergeInfo.getId().equals(courseSchedule.getId())){
 				courseMergeInfo.setClassGroupId(courseSchedule.getClassGroupId());
+				courseMergeInfo.setGroupType(courseSchedule.getGroupType());
+				courseMergeInfo.setMusicGroupId(courseSchedule.getMusicGroupId());
 			}
 			courseSchedule.setNote("课程合并");
 		}
@@ -5279,34 +5281,40 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		Set<Integer> allStudentIds = courseScheduleStudentPayments.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toSet());
 
 		Map<Integer, CourseScheduleStudentPayment> mainStudentCourseMap = courseScheduleStudentPayments.stream().filter(c -> courseMergeInfo.getId().equals(c.getCourseScheduleId())).collect(Collectors.toMap(CourseScheduleStudentPayment::getUserId, c -> c, (c1, c2) -> c1));
+
+		Map<Integer, List<CourseScheduleStudentPayment>> otherStudentCourseMap = courseScheduleStudentPayments.stream().filter(c -> !courseMergeInfo.getId().equals(c.getCourseScheduleId())).collect(Collectors.groupingBy(CourseScheduleStudentPayment::getUserId));
+
+
 		List<CourseScheduleStudentPayment> newPayments = new ArrayList<>();
 		List<CourseScheduleStudentPayment> updatePayments = new ArrayList<>();
-		for (Map.Entry<Integer, CourseScheduleStudentPayment> mainStudentCourseMapEntry : mainStudentCourseMap.entrySet()) {
-			BigDecimal salary = courseScheduleStudentPayments.stream().filter(c -> mainStudentCourseMapEntry.getKey().equals(c.getUserId())).map(CourseScheduleStudentPayment::getExpectPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-			CourseScheduleStudentPayment updatePayment = mainStudentCourseMapEntry.getValue();
-			updatePayment.setExpectPrice(salary);
-			updatePayments.add(updatePayment);
-		}
 
-		for (CourseScheduleStudentPayment courseScheduleStudentPayment : courseScheduleStudentPayments) {
-			CourseScheduleStudentPayment updatePayment = mainStudentCourseMap.get(courseScheduleStudentPayment.getUserId());
-			if(Objects.nonNull(updatePayment)&&updatePayment.getCourseScheduleId().equals(courseScheduleStudentPayment.getCourseScheduleId())){
-				continue;
-			}
-			if(Objects.nonNull(updatePayment)&&updatePayment.getUserId().equals(courseScheduleStudentPayment.getUserId())){
-
-				courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
-				updatePayments.add(courseScheduleStudentPayment);
+		for (Map.Entry<Integer, List<CourseScheduleStudentPayment>> otherStudentCourseMapEntry : otherStudentCourseMap.entrySet()) {
+			List<CourseScheduleStudentPayment> studentCoursePayments = otherStudentCourseMapEntry.getValue();
+			BigDecimal salary = studentCoursePayments.stream().map(CourseScheduleStudentPayment::getExpectPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+			if(mainStudentCourseMap.containsKey(otherStudentCourseMapEntry.getKey())){
+				CourseScheduleStudentPayment updatePayment = mainStudentCourseMap.get(otherStudentCourseMapEntry.getKey());
+				updatePayment.setExpectPrice(updatePayment.getExpectPrice().add(salary));
+				updatePayments.add(updatePayment);
+
+				for (CourseScheduleStudentPayment studentCoursePayment : studentCoursePayments) {
+					studentCoursePayment.setExpectPrice(BigDecimal.ZERO);
+					updatePayments.add(studentCoursePayment);
+				}
 				continue;
 			}
 			CourseScheduleStudentPayment newPayment = new CourseScheduleStudentPayment();
-			BeanUtils.copyProperties(courseScheduleStudentPayment, newPayment);
+			BeanUtils.copyProperties(studentCoursePayments.get(0), newPayment);
 			newPayment.setCourseScheduleId(courseMergeInfo.getId());
 			newPayment.setClassGroupId(courseMergeInfo.getClassGroupId());
-			courseScheduleStudentPayment.setExpectPrice(BigDecimal.ZERO);
+			newPayment.setMusicGroupId(courseMergeInfo.getMusicGroupId());
+			newPayment.setGroupType(courseMergeInfo.getGroupType());
+			newPayment.setExpectPrice(salary);
 			newPayment.setId(null);
 			newPayments.add(newPayment);
-			updatePayments.add(courseScheduleStudentPayment);
+			for (CourseScheduleStudentPayment studentCoursePayment : studentCoursePayments) {
+				studentCoursePayment.setExpectPrice(BigDecimal.ZERO);
+				updatePayments.add(studentCoursePayment);
+			}
 		}
 
 		List<CourseSchedule> courseSchedules=new ArrayList<>();

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

@@ -289,7 +289,7 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 			studentExtracurricularExercisesSituation.setExercisesMessageTimelyNum(exercisesMessageTimelyNum>0?1:0);
 			results.add(studentExtracurricularExercisesSituation);
 		}
-		studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString());
+		studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString(),null);
 		studentExtracurricularExercisesSituationDao.batchInsert(results);
 	}
 
@@ -359,7 +359,7 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 			results.add(studentExtracurricularExercisesSituation);
 		}
 
-		studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString());
+		studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString(),null);
 
 		BigDecimal currentPage=BigDecimal.ONE,
                 pageSize=new BigDecimal(10000),

+ 43 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -1561,10 +1561,27 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup == null) {
             throw new BizException("乐团不存在");
         }
+        
+        if(musicGroup.getStatus() == MusicGroupStatusEnum.CANCELED || musicGroup.getStatus() == MusicGroupStatusEnum.PAUSE){
+        	throw new BizException("申请失败,乐团状态[已取消]或[已暂停]");
+        }
+        Integer userId = sysUser.getId();
+        
+        StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+        if (studentRegistration == null) {
+            throw new BizException("用户注册信息不存在");
+        }
+        
+        MusicGroupQuit musicGroupQuit = musicGroupQuitDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+    	if(musicGroupQuit != null){
+    		if(musicGroupQuit.getStatus() == ApprovalStatus.PROCESSING){
+    			throw new BizException("申请失败,存在[申请中]的记录");
+    		}
+    	}
 
-        MusicGroupQuit musicGroupQuit = new MusicGroupQuit();
+        musicGroupQuit = new MusicGroupQuit();
         musicGroupQuit.setCreateTime(new Date());
-        musicGroupQuit.setJoinDate(sysUser.getCreateTime());
+        musicGroupQuit.setJoinDate(studentRegistration.getCreateTime());
         musicGroupQuit.setMusicGroupId(musicGroupId);
         musicGroupQuit.setUserId(sysUser.getId());
         musicGroupQuit.setUserComment(reason);
@@ -1624,6 +1641,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         String musicGroupId = musicGroupQuit.getMusicGroupId();
         Integer userId = musicGroupQuit.getUserId();
+        
+        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+        if (musicGroup == null) {
+            throw new BizException("乐团不存在");
+        }
+        
+        if(musicGroup.getStatus() == MusicGroupStatusEnum.CANCELED || musicGroup.getStatus() == MusicGroupStatusEnum.PAUSE){
+        	throw new BizException("申请失败,乐团状态[已取消]或[已暂停]");
+        }
 
         musicGroupQuit.setStatus(status);
         musicGroupQuit.setReason(reason);
@@ -1766,12 +1792,26 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (sysUser == null) {
             throw new BizException("获取用户信息失败");
         }
+        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+        if (musicGroup == null) {
+            throw new BizException("乐团不存在");
+        }
+        
+        if(musicGroup.getStatus() == MusicGroupStatusEnum.CANCELED || musicGroup.getStatus() == MusicGroupStatusEnum.PAUSE){
+        	throw new BizException("申请失败,乐团状态[已取消]或[已暂停]");
+        }
 
+        // 判断乐器是否是租赁
+        StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+        if (studentRegistration == null) {
+            throw new BizException("用户注册信息不存在");
+        }
+        
         Date date = new Date();
 
         MusicGroupQuit musicGroupQuit = new MusicGroupQuit();
         musicGroupQuit.setCreateTime(date);
-        musicGroupQuit.setJoinDate(sysUser.getCreateTime());
+        musicGroupQuit.setJoinDate(studentRegistration.getCreateTime());
         musicGroupQuit.setMusicGroupId(musicGroupId);
         musicGroupQuit.setUserId(sysUser.getId());
         musicGroupQuit.setStatus(ApprovalStatus.APPROVED);
@@ -1780,12 +1820,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         musicGroupQuitDao.insert(musicGroupQuit);
 
-        // 判断乐器是否是租赁
-        StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
-        if (studentRegistration == null) {
-            throw new BizException("用户注册信息不存在");
-        }
-
         List<Integer> classGroupIdList = classGroupStudentMapperDao.queryClassGroupIdList(musicGroupId, userId, GroupType.MUSIC);
         for (Integer classGroupId : classGroupIdList) {
             ClassGroup classGroup = classGroupService.get(classGroupId);

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

@@ -351,6 +351,12 @@ public class PayServiceImpl implements PayService {
             if (i == routeScaleDtos.size() && !feeFlag) {
                 routeScaleDto.setFeeFlag("Y");
             }
+            //ADAPAY 采用延迟分账模式,手续费各自承担(2021-01-01号正式执行)
+            String delayRouteStartDate = sysConfigDao.findConfigValue("delay_route_start_date");
+            if (routeScaleDto.getPayType().equals(PaymentChannelEnum.ADAPAY) &&
+                    new Date().after(Objects.requireNonNull(DateUtil.stringToDate(delayRouteStartDate, "yyyy-MM-dd HH:mm:ss")))) {
+                routeScaleDto.setFeeFlag("Y");
+            }
 
             StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
             studentPaymentRouteOrder.setOrderNo(orderNo);
@@ -474,9 +480,9 @@ public class PayServiceImpl implements PayService {
         for (Map.Entry<String, List<RouteScaleDto>> groupRouteScaleDtos : routeScaleDtosMap.entrySet()) {
             RouteScaleDto routeScaleDto = null;
             for (RouteScaleDto scaleDto : groupRouteScaleDtos.getValue()) {
-                if(routeScaleDto == null){
+                if (routeScaleDto == null) {
                     routeScaleDto = scaleDto;
-                }else {
+                } else {
                     routeScaleDto.setAmount(routeScaleDto.getAmount().add(scaleDto.getAmount()));
                     routeScaleDto.setBalance(routeScaleDto.getBalance().add(scaleDto.getBalance()));
                 }

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

@@ -1,7 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -12,7 +11,6 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.time.DateUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -652,7 +650,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
 
-        List<StudentAttendance> dataList = null;
+        List<StudentAttendance> dataList = new ArrayList<StudentAttendance>();
         int count = studentAttendanceDao.countStudentAttendance(params);
         if (count > 0) {
             pageInfo.setTotal(count);

+ 50 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -2,12 +2,15 @@ package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
@@ -15,7 +18,9 @@ import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.thirdparty.yqpay.RsqMsg;
@@ -25,6 +30,7 @@ import com.ym.mec.util.collection.MapUtil;
 
 import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.snaker.engine.entity.Order;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -62,6 +68,12 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private SubjectChangeService subjectChangeService;
     @Autowired
     private DegreeRegistrationService degreeRegistrationService;
+    @Autowired
+    private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+    @Autowired
+    private SysConfigDao sysConfigDao;
 
     @Override
     public BaseDAO<Long, StudentPaymentOrder> getDAO() {
@@ -162,7 +174,6 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         if (payingOrders.size() == 0) {
             return;
         }
-
         List<String> orderNoList = new ArrayList<String>();
 
         for (StudentPaymentOrder payingOrder : payingOrders) {
@@ -220,6 +231,11 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             //增加用户余额
             sysUserCashAccountService.updateBalance(order.getUserId(), order.getActualAmount(),
                     PlatformCashAccountDetailTypeEnum.REFUNDS, memo + ",订单号:" + order.getOrderNo());
+
+            if (order.getPaymentChannel().equals("ADAPAY")
+                    && !rpMap.containsKey("simulation")) {
+                confirmOrder(order);
+            }
             return;
         }
 
@@ -238,9 +254,41 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         }
         order.setPaymentBusinessChannel(rpMap.get("channelType"));
 
+        if (status.equals(DealStatusEnum.SUCCESS) && order.getPaymentChannel().equals("ADAPAY")
+                && !rpMap.containsKey("simulation")) {
+            confirmOrder(order);
+        }
+
         callOrderCallBack(order);
     }
 
+    private Boolean confirmOrder(StudentPaymentOrder order) throws Exception {
+        String delayRouteStartDate = sysConfigDao.findConfigValue("delay_route_start_date");
+        if (order.getCreateTime().before(Objects.requireNonNull(DateUtil.stringToDate(delayRouteStartDate, "yyyy-MM-dd HH:mm:ss")))) {
+            return true;
+        }
+        List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(order.getOrderNo());
+        for (StudentPaymentRouteOrder routeOrder : routeOrders) {
+            Map<String, Object> divMember = new HashMap<>();
+            divMember.put("member_id", routeOrder.getMerNo());//分佣账户
+            divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
+            divMember.put("fee_flag", "Y");
+            if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
+                divMember.put("member_id", 0);
+            }
+            List<Map<String, Object>> divMembers = new ArrayList<>();
+            divMembers.add(divMember);
+
+            Map<String, Object> confirm = new HashMap<>();
+            confirm.put("payment_id", order.getTransNo());
+            confirm.put("order_no", idGeneratorService.generatorId("payment"));
+            confirm.put("confirm_amt", routeOrder.getRouteAmount());
+            confirm.put("div_members", divMembers);
+            Payment.createConfirm(confirm);
+        }
+        return true;
+    }
+
     //Date date = new Date();
     //        BigDecimal balance = BigDecimal.ZERO;
     //        MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
@@ -418,6 +466,6 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     public List<StudentPaymentOrder> getUserOrderByType(Integer userId, OrderTypeEnum type, DealStatusEnum status) {
-       return studentPaymentOrderDao.getUserOrderByType(userId,type,status);
+        return studentPaymentOrderDao.getUserOrderByType(userId, type, status);
     }
 }

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

@@ -653,6 +653,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }*/
         Date date = new Date();
         String musicGroupId = studentRegistration.getMusicGroupId();
+        
+        studentRegistration.setCreateTime(date);
+        studentRegistration.setUpdateTime(date);
 
         StudentRegistration phoneAndMusicGroupId = studentRegistrationDao.getByPhoneAndMusicGroupId(musicGroupId, studentRegistration.getParentsPhone());
         if (phoneAndMusicGroupId != null && phoneAndMusicGroupId.getMusicGroupStatus() != StudentMusicGroupStatusEnum.QUIT && phoneAndMusicGroupId.getMusicGroupStatus() != StudentMusicGroupStatusEnum.APPLY) {

+ 228 - 94
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -275,7 +275,7 @@ public class StudentServeServiceImpl implements StudentServeService {
             currentPage=currentPage.add(BigDecimal.ONE);
         }
 
-        studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString());
+        studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString(), null);
 
         BigDecimal currentPage1=BigDecimal.ONE,
                 pageSize1=new BigDecimal(10000),
@@ -294,6 +294,11 @@ public class StudentServeServiceImpl implements StudentServeService {
     public void exercisesSituationStatistics2(String monday, List<Integer> studentIds) {
         LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
 
+        int lastWeekTodayUpdateNum = studentExtracurricularExercisesSituationDao.findLastWeekTodayUpdateNum(nowDate.plusDays(-nowDate.getDayOfWeek().getValue()).toString());
+        if(lastWeekTodayUpdateNum<=0){
+            nowDate = nowDate.plusDays(-nowDate.getDayOfWeek().getValue());
+        }
+
         if(StringUtils.isNotBlank(monday)){
             nowDate=LocalDate.parse(monday, DateUtil.dateFormatter);
         }
@@ -427,59 +432,178 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
 
         if(!CollectionUtils.isEmpty(results)){
-//            studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString());
-            BigDecimal currentPage1=BigDecimal.ONE,
-                    pageSize1=new BigDecimal(10000),
-                    total1=new BigDecimal(results.size()),
-                    totalPage1=total1.divide(pageSize1, BigDecimal.ROUND_UP);
 
-            while (currentPage1.compareTo(totalPage1)<=0){
-                List<StudentExtracurricularExercisesSituation> rows=results.stream().skip(pageSize1.multiply(currentPage1.subtract(BigDecimal.ONE)).longValue()).limit(pageSize1.longValue()).collect(Collectors.toList());
-                List<Integer> updateStudentIds = rows.stream().map(StudentExtracurricularExercisesSituation::getStudentId).collect(Collectors.toList());
+            if(CollectionUtils.isEmpty(studentIds)){
+                studentIds = results.stream().map(StudentExtracurricularExercisesSituation::getStudentId).collect(Collectors.toList());
+            }
+
+            Map<Integer, List<StudentServeCourseHomeworkDto>> studentHomeworkMap=new HashMap<>();
+            Map<Integer, List<ExtracurricularExercisesReply>> studentExercisesMap=new HashMap<>();
 
-                List<StudentExtracurricularExercisesSituation> weekServiceWithStudents = studentExtracurricularExercisesSituationDao.findWeekServiceWithStudents(monDayDate.toString(), null, updateStudentIds);
-                Map<String, StudentExtracurricularExercisesSituation> codeServeMap = weekServiceWithStudents.stream().collect(Collectors.toMap(StudentExtracurricularExercisesSituation::getStuAndTeaCode, s -> s, (s1, s2) -> s1));
+            List<StudentServeCourseHomeworkDto> allStudentHomeworks = studentCourseHomeworkDao.findStudentHomeworkWithCourseDateRange(monDayDate.toString(), sunDayDate.toString(), new ArrayList<>(studentIds));
+            List<StudentServeCourseHomeworkDto> studentHomeworksTmp =new ArrayList<>();
+            for (StudentServeCourseHomeworkDto studentHomework : allStudentHomeworks) {
+                LocalDate courseStartLocalDate = LocalDateTime.ofInstant(studentHomework.getCourseStartTime().toInstant(), DateUtil.zoneId).toLocalDate();
+                switch (courseStartLocalDate.getDayOfWeek()){
+                    case SATURDAY:
+                        if(DateUtil.daysBetween(studentHomework.getCourseStartTime(), studentHomework.getHomeworkCreateTime())<4){
+                            studentHomeworksTmp.add(studentHomework);
+                        }
+                        break;
+                    case SUNDAY:
+                        if(DateUtil.daysBetween(studentHomework.getCourseStartTime(), studentHomework.getHomeworkCreateTime())<3){
+                            studentHomeworksTmp.add(studentHomework);
+                        }
+                        break;
+                    default:
+                        LocalDate homeworkCreateTime = LocalDateTime.ofInstant(studentHomework.getHomeworkCreateTime().toInstant(), DateUtil.zoneId).toLocalDate();
+                        if(courseStartLocalDate.get(DateUtil.weekFields.weekOfYear())==homeworkCreateTime.get(DateUtil.weekFields.weekOfYear())){
+                            studentHomeworksTmp.add(studentHomework);
+                        }
+                        break;
+                }
+            }
+            if(!CollectionUtils.isEmpty(studentHomeworksTmp)){
+                studentHomeworkMap = studentHomeworksTmp.stream()
+                        .collect(Collectors.groupingBy(StudentServeCourseHomeworkDto::getUserId));
+            }
+
+
+            List<ExtracurricularExercisesReply> allStudentExercises = extracurricularExercisesReplyDao.getStudentExercisesWithTimeZone(monDayDate.toString(), sunDayDate.toString(), new ArrayList<>(studentIds));
+            if(!CollectionUtils.isEmpty(allStudentExercises)){
+                studentExercisesMap = allStudentExercises.stream().collect(Collectors.groupingBy(ExtracurricularExercisesReply::getUserId));
+            }
 
-                Set<String> newCodes = rows.stream().map(StudentExtracurricularExercisesSituation::getStuAndTeaCode).collect(Collectors.toSet());
-                for (StudentExtracurricularExercisesSituation weekServiceWithStudent : weekServiceWithStudents) {
-                    if(weekServiceWithStudent.getActualExercisesNum()>0||newCodes.contains(weekServiceWithStudent.getStuAndTeaCode())){
-                        continue;
+            for (StudentExtracurricularExercisesSituation weekServiceWithStudent : results) {
+                List<StudentServeCourseHomeworkDto> studentAllHomeworks = studentHomeworkMap.get(weekServiceWithStudent.getStudentId());
+                weekServiceWithStudent.setActualExercisesNum(0);
+                if(!CollectionUtils.isEmpty(studentAllHomeworks)&&weekServiceWithStudent.getServeType().equals("HOMEWORK")){
+                    Set<String> courseIds = Arrays.stream(weekServiceWithStudent.getCourseIds().split(",")).collect(Collectors.toSet());
+                    List<StudentServeCourseHomeworkDto> studentHomeworks = studentAllHomeworks.stream().filter(s -> courseIds.contains(s.getCourseScheduleId().toString())).collect(Collectors.toList());
+                    if(!CollectionUtils.isEmpty(studentHomeworks)){
+                        weekServiceWithStudent.setActualExercisesNum(1);
+                        long replyNum = studentHomeworks.stream().filter(e -> YesOrNoEnum.YES.equals(e.getStatus())).count();
+                        weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);
+                        long haveSubmitTimes = studentHomeworks.stream().filter(e -> Objects.nonNull(e.getSubmitTime())).count();
+                        if(replyNum>0&&haveSubmitTimes>0){
+                            Date lastSubmitTime = studentHomeworks.stream().filter(e->Objects.nonNull(e.getSubmitTime())).max(Comparator.comparing(StudentServeCourseHomeworkDto::getSubmitTime)).get().getSubmitTime();
+                            weekServiceWithStudent.setLastSubmitTime(lastSubmitTime);
+                        }
+                        int exercisesMessageNum=0;
+                        int exercisesMessageTimelyNum=0;
+                        for (StudentServeCourseHomeworkDto studentHomework : studentHomeworks) {
+                            if(!YesOrNoEnum.YES.equals(studentHomework.getStatus())){
+                                continue;
+                            }
+                            if(!YesOrNoEnum.YES.equals(studentHomework.getIsReplied())){
+                                continue;
+                            }
+                            exercisesMessageNum+=1;
+                            if(new Integer(1).equals(studentHomework.getIsRepliedTimely())){
+                                exercisesMessageTimelyNum+=1;
+                            }
+                        }
+                        weekServiceWithStudent.setExercisesMessageNum(exercisesMessageNum>0?1:0);
+                        weekServiceWithStudent.setExercisesMessageTimelyNum(exercisesMessageTimelyNum>0?1:0);
                     }
-                    studentExtracurricularExercisesSituationDao.delete(weekServiceWithStudent.getId());
                 }
 
-                List<StudentExtracurricularExercisesSituation> newService = new ArrayList<>();
-                List<StudentExtracurricularExercisesSituation> updateService = new ArrayList<>();
-                for (StudentExtracurricularExercisesSituation result : rows) {
-                    if(codeServeMap.containsKey(result.getStuAndTeaCode())){
-                        StudentExtracurricularExercisesSituation s = codeServeMap.get(result.getStuAndTeaCode());
-                        Set<Long> courseIds = new HashSet<>();
-                        if(StringUtils.isNotBlank(s.getCourseIds())&&s.getActualExercisesNum()>0){
-                            courseIds = Arrays.stream(s.getCourseIds().split(",")).map(id->Long.valueOf(id)).collect(Collectors.toSet());
+                List<ExtracurricularExercisesReply> studentAllExercises = studentExercisesMap.get(weekServiceWithStudent.getStudentId());
+                if(!CollectionUtils.isEmpty(studentAllExercises)&&weekServiceWithStudent.getServeType().equals("EXERCISE")){
+                    List<ExtracurricularExercisesReply> studentExercises = studentAllExercises.stream().filter(s -> weekServiceWithStudent.getTeacherId().equals(s.getExtracurricularExercises().getTeacherId())).collect(Collectors.toList());
+                    if(!CollectionUtils.isEmpty(studentExercises)){
+                        weekServiceWithStudent.setActualExercisesNum(1);
+                        long replyNum = studentExercises.stream().filter(e -> e.getStatus()==1).count();
+                        if(weekServiceWithStudent.getExercisesReplyNum()<=0){
+                            weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);
                         }
-                        if(StringUtils.isNotBlank(result.getCourseIds())){
-                            courseIds.addAll(Arrays.stream(result.getCourseIds().split(",")).map(id->Long.valueOf(id)).collect(Collectors.toSet()));
+                        long haveSubmitTimes = studentExercises.stream().filter(e->Objects.nonNull(e.getSubmitTime())).count();
+                        if(replyNum>0&&haveSubmitTimes>0){
+                            Date lastSubmitTime = studentExercises.stream().filter(e->Objects.nonNull(e.getSubmitTime())).max(Comparator.comparing(ExtracurricularExercisesReply::getSubmitTime)).get().getSubmitTime();
+                            if(Objects.isNull(weekServiceWithStudent.getLastSubmitTime())||lastSubmitTime.after(weekServiceWithStudent.getLastSubmitTime())){
+                                weekServiceWithStudent.setLastSubmitTime(lastSubmitTime);
+                            }
                         }
-                        s.setServeType(result.getServeType());
-                        if(s.getServeType().equals("HOMEWORK")){
-                            s.setCourseIds(StringUtils.join(courseIds, ","));
-                        }else{
-                            s.setCourseIds("");
+                        int exercisesMessageNum=0;
+                        int exercisesMessageTimelyNum=0;
+                        for (ExtracurricularExercisesReply studentHomework : studentExercises) {
+                            if(!new Integer(1).equals(studentHomework.getStatus())){
+                                continue;
+                            }
+                            if(!new Integer(1).equals(studentHomework.getIsReplied())){
+                                continue;
+                            }
+                            exercisesMessageNum+=1;
+                            if(new Integer(1).equals(studentHomework.getIsRepliedTimely())){
+                                exercisesMessageTimelyNum+=1;
+                            }
                         }
-                        if(StringUtils.isBlank(s.getCourseIds())){
-                            s.setExpectExercisesNum(1);
-                        }else{
-                            s.setExpectExercisesNum(courseIds.size());
+                        if(weekServiceWithStudent.getExercisesMessageNum()<=0){
+                            weekServiceWithStudent.setExercisesMessageNum(exercisesMessageNum>0?1:0);
+                        }
+                        if(weekServiceWithStudent.getExercisesMessageTimelyNum()<=0){
+                            weekServiceWithStudent.setExercisesMessageTimelyNum(exercisesMessageTimelyNum>0?1:0);
                         }
-                        updateService.add(s);
-                    }else{
-                        newService.add(result);
                     }
                 }
-                if(!CollectionUtils.isEmpty(updateService))
-                    studentExtracurricularExercisesSituationDao.batchUpdate(updateService);
-                if(!CollectionUtils.isEmpty(newService))
-                    studentExtracurricularExercisesSituationDao.batchInsert(newService);
+            }
+
+            studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString(), studentIds);
+
+            BigDecimal currentPage1=BigDecimal.ONE,
+                    pageSize1=new BigDecimal(10000),
+                    total1=new BigDecimal(results.size()),
+                    totalPage1=total1.divide(pageSize1, BigDecimal.ROUND_UP);
+
+            while (currentPage1.compareTo(totalPage1)<=0){
+                List<StudentExtracurricularExercisesSituation> rows=results.stream().skip(pageSize1.multiply(currentPage1.subtract(BigDecimal.ONE)).longValue()).limit(pageSize1.longValue()).collect(Collectors.toList());
+//                List<Integer> updateStudentIds = rows.stream().map(StudentExtracurricularExercisesSituation::getStudentId).collect(Collectors.toList());
+//
+//                List<StudentExtracurricularExercisesSituation> weekServiceWithStudents = studentExtracurricularExercisesSituationDao.findWeekServiceWithStudents(monDayDate.toString(), null, updateStudentIds);
+//                Map<String, StudentExtracurricularExercisesSituation> codeServeMap = weekServiceWithStudents.stream().collect(Collectors.toMap(StudentExtracurricularExercisesSituation::getStuAndTeaCode, s -> s, (s1, s2) -> s1));
+//
+//                Set<String> newCodes = rows.stream().map(StudentExtracurricularExercisesSituation::getStuAndTeaCode).collect(Collectors.toSet());
+//                for (StudentExtracurricularExercisesSituation weekServiceWithStudent : weekServiceWithStudents) {
+//                    if(weekServiceWithStudent.getActualExercisesNum()>0||newCodes.contains(weekServiceWithStudent.getStuAndTeaCode())){
+//                        continue;
+//                    }
+//                    studentExtracurricularExercisesSituationDao.delete(weekServiceWithStudent.getId());
+//                }
+//
+//                List<StudentExtracurricularExercisesSituation> newService = new ArrayList<>();
+//                List<StudentExtracurricularExercisesSituation> updateService = new ArrayList<>();
+//                for (StudentExtracurricularExercisesSituation result : rows) {
+//                    if(codeServeMap.containsKey(result.getStuAndTeaCode())){
+//                        StudentExtracurricularExercisesSituation s = codeServeMap.get(result.getStuAndTeaCode());
+//                        Set<Long> courseIds = new HashSet<>();
+//                        if(StringUtils.isNotBlank(s.getCourseIds())&&s.getActualExercisesNum()>0){
+//                            courseIds = Arrays.stream(s.getCourseIds().split(",")).map(id->Long.valueOf(id)).collect(Collectors.toSet());
+//                        }
+//                        if(StringUtils.isNotBlank(result.getCourseIds())){
+//                            courseIds.addAll(Arrays.stream(result.getCourseIds().split(",")).map(id->Long.valueOf(id)).collect(Collectors.toSet()));
+//                        }
+//                        s.setServeType(result.getServeType());
+//                        if(s.getServeType().equals("HOMEWORK")){
+//                            s.setCourseIds(StringUtils.join(courseIds, ","));
+//                        }else{
+//                            s.setCourseIds("");
+//                        }
+//                        if(StringUtils.isBlank(s.getCourseIds())){
+//                            s.setExpectExercisesNum(1);
+//                        }else{
+//                            s.setExpectExercisesNum(courseIds.size());
+//                        }
+//                        updateService.add(s);
+//                    }else{
+//                        newService.add(result);
+//                    }
+//                }
+//                if(!CollectionUtils.isEmpty(updateService))
+//                    studentExtracurricularExercisesSituationDao.batchUpdate(updateService);
+//                if(!CollectionUtils.isEmpty(newService))
+//                    studentExtracurricularExercisesSituationDao.batchInsert(newService);
+
+                studentExtracurricularExercisesSituationDao.batchInsert(rows);
 
                 currentPage1=currentPage1.add(BigDecimal.ONE);
             }
@@ -489,6 +613,9 @@ public class StudentServeServiceImpl implements StudentServeService {
 
     @Override
     public void updateExercisesSituation(Date date,List<Integer> studentIds, Integer teacherId) {
+//        if(true){
+//            return;
+//        }
         LocalDate nowDate = LocalDateTime.ofInstant(date.toInstant(), DateUtil.zoneId).toLocalDate();
         if(Objects.isNull(date)){
             nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
@@ -540,68 +667,75 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
 
         for (StudentExtracurricularExercisesSituation weekServiceWithStudent : weekServiceWithStudents) {
-            List<StudentServeCourseHomeworkDto> studentHomeworks = studentHomeworkMap.get(weekServiceWithStudent.getStudentId());
+            List<StudentServeCourseHomeworkDto> studentAllHomeworks = studentHomeworkMap.get(weekServiceWithStudent.getStudentId());
             weekServiceWithStudent.setActualExercisesNum(0);
-            if(!CollectionUtils.isEmpty(studentHomeworks)&&weekServiceWithStudent.getServeType().equals("HOMEWORK")){
-                weekServiceWithStudent.setActualExercisesNum(1);
-                long replyNum = studentHomeworks.stream().filter(e -> YesOrNoEnum.YES.equals(e.getStatus())).count();
-                weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);
-                long haveSubmitTimes = studentHomeworks.stream().filter(e -> Objects.nonNull(e.getSubmitTime())).count();
-                if(replyNum>0&&haveSubmitTimes>0){
-                    Date lastSubmitTime = studentHomeworks.stream().filter(e->Objects.nonNull(e.getSubmitTime())).max(Comparator.comparing(StudentServeCourseHomeworkDto::getSubmitTime)).get().getSubmitTime();
-                    weekServiceWithStudent.setLastSubmitTime(lastSubmitTime);
-                }
-                int exercisesMessageNum=0;
-                int exercisesMessageTimelyNum=0;
-                for (StudentServeCourseHomeworkDto studentHomework : studentHomeworks) {
-                    if(!YesOrNoEnum.YES.equals(studentHomework.getStatus())){
-                        continue;
-                    }
-                    if(!YesOrNoEnum.YES.equals(studentHomework.getIsReplied())){
-                        continue;
+            if(!CollectionUtils.isEmpty(studentAllHomeworks)&&weekServiceWithStudent.getServeType().equals("HOMEWORK")){
+                Set<String> courseIds = Arrays.stream(weekServiceWithStudent.getCourseIds().split(",")).collect(Collectors.toSet());
+                List<StudentServeCourseHomeworkDto> studentHomeworks = studentAllHomeworks.stream().filter(s -> courseIds.contains(s.getCourseScheduleId())).collect(Collectors.toList());
+                if(!CollectionUtils.isEmpty(studentHomeworks)){
+                    weekServiceWithStudent.setActualExercisesNum(1);
+                    long replyNum = studentHomeworks.stream().filter(e -> YesOrNoEnum.YES.equals(e.getStatus())).count();
+                    weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);
+                    long haveSubmitTimes = studentHomeworks.stream().filter(e -> Objects.nonNull(e.getSubmitTime())).count();
+                    if(replyNum>0&&haveSubmitTimes>0){
+                        Date lastSubmitTime = studentHomeworks.stream().filter(e->Objects.nonNull(e.getSubmitTime())).max(Comparator.comparing(StudentServeCourseHomeworkDto::getSubmitTime)).get().getSubmitTime();
+                        weekServiceWithStudent.setLastSubmitTime(lastSubmitTime);
                     }
-                    exercisesMessageNum+=1;
-                    if(new Integer(1).equals(studentHomework.getIsRepliedTimely())){
-                        exercisesMessageTimelyNum+=1;
+                    int exercisesMessageNum=0;
+                    int exercisesMessageTimelyNum=0;
+                    for (StudentServeCourseHomeworkDto studentHomework : studentHomeworks) {
+                        if(!YesOrNoEnum.YES.equals(studentHomework.getStatus())){
+                            continue;
+                        }
+                        if(!YesOrNoEnum.YES.equals(studentHomework.getIsReplied())){
+                            continue;
+                        }
+                        exercisesMessageNum+=1;
+                        if(new Integer(1).equals(studentHomework.getIsRepliedTimely())){
+                            exercisesMessageTimelyNum+=1;
+                        }
                     }
+                    weekServiceWithStudent.setExercisesMessageNum(exercisesMessageNum>0?1:0);
+                    weekServiceWithStudent.setExercisesMessageTimelyNum(exercisesMessageTimelyNum>0?1:0);
                 }
-                weekServiceWithStudent.setExercisesMessageNum(exercisesMessageNum>0?1:0);
-                weekServiceWithStudent.setExercisesMessageTimelyNum(exercisesMessageTimelyNum>0?1:0);
             }
 
-            List<ExtracurricularExercisesReply> studentExercises = studentExercisesMap.get(weekServiceWithStudent.getStudentId());
-            if(!CollectionUtils.isEmpty(studentExercises)&&weekServiceWithStudent.getServeType().equals("EXERCISE")){
-                weekServiceWithStudent.setActualExercisesNum(1);
-                long replyNum = studentExercises.stream().filter(e -> e.getStatus()==1).count();
-                if(weekServiceWithStudent.getExercisesReplyNum()<=0){
-                    weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);
-                }
-                long haveSubmitTimes = studentExercises.stream().filter(e->Objects.nonNull(e.getSubmitTime())).count();
-                if(replyNum>0&&haveSubmitTimes>0){
-                    Date lastSubmitTime = studentExercises.stream().filter(e->Objects.nonNull(e.getSubmitTime())).max(Comparator.comparing(ExtracurricularExercisesReply::getSubmitTime)).get().getSubmitTime();
-                    if(Objects.isNull(weekServiceWithStudent.getLastSubmitTime())||lastSubmitTime.after(weekServiceWithStudent.getLastSubmitTime())){
-                        weekServiceWithStudent.setLastSubmitTime(lastSubmitTime);
+            List<ExtracurricularExercisesReply> studentAllExercises = studentExercisesMap.get(weekServiceWithStudent.getStudentId());
+            if(!CollectionUtils.isEmpty(studentAllExercises)&&weekServiceWithStudent.getServeType().equals("EXERCISE")){
+                List<ExtracurricularExercisesReply> studentExercises = studentAllExercises.stream().filter(s -> weekServiceWithStudent.getTeacherId().equals(s.getExtracurricularExercises().getTeacherId())).collect(Collectors.toList());
+                if(!CollectionUtils.isEmpty(studentExercises)){
+                    weekServiceWithStudent.setActualExercisesNum(1);
+                    long replyNum = studentExercises.stream().filter(e -> e.getStatus()==1).count();
+                    if(weekServiceWithStudent.getExercisesReplyNum()<=0){
+                        weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);
                     }
-                }
-                int exercisesMessageNum=0;
-                int exercisesMessageTimelyNum=0;
-                for (ExtracurricularExercisesReply studentHomework : studentExercises) {
-                    if(!new Integer(1).equals(studentHomework.getStatus())){
-                        continue;
+                    long haveSubmitTimes = studentExercises.stream().filter(e->Objects.nonNull(e.getSubmitTime())).count();
+                    if(replyNum>0&&haveSubmitTimes>0){
+                        Date lastSubmitTime = studentExercises.stream().filter(e->Objects.nonNull(e.getSubmitTime())).max(Comparator.comparing(ExtracurricularExercisesReply::getSubmitTime)).get().getSubmitTime();
+                        if(Objects.isNull(weekServiceWithStudent.getLastSubmitTime())||lastSubmitTime.after(weekServiceWithStudent.getLastSubmitTime())){
+                            weekServiceWithStudent.setLastSubmitTime(lastSubmitTime);
+                        }
                     }
-                    if(!new Integer(1).equals(studentHomework.getIsReplied())){
-                        continue;
+                    int exercisesMessageNum=0;
+                    int exercisesMessageTimelyNum=0;
+                    for (ExtracurricularExercisesReply studentHomework : studentExercises) {
+                        if(!new Integer(1).equals(studentHomework.getStatus())){
+                            continue;
+                        }
+                        if(!new Integer(1).equals(studentHomework.getIsReplied())){
+                            continue;
+                        }
+                        exercisesMessageNum+=1;
+                        if(new Integer(1).equals(studentHomework.getIsRepliedTimely())){
+                            exercisesMessageTimelyNum+=1;
+                        }
                     }
-                    exercisesMessageNum+=1;
-                    if(new Integer(1).equals(studentHomework.getIsRepliedTimely())){
-                        exercisesMessageTimelyNum+=1;
+                    if(weekServiceWithStudent.getExercisesMessageNum()<=0){
+                        weekServiceWithStudent.setExercisesMessageNum(exercisesMessageNum>0?1:0);
+                    }
+                    if(weekServiceWithStudent.getExercisesMessageTimelyNum()<=0){
+                        weekServiceWithStudent.setExercisesMessageTimelyNum(exercisesMessageTimelyNum>0?1:0);
                     }
-                }
-                if(weekServiceWithStudent.getExercisesMessageNum()<=0){
-                    weekServiceWithStudent.setExercisesMessageNum(exercisesMessageNum>0?1:0);
-                }
-                if(weekServiceWithStudent.getExercisesMessageTimelyNum()<=0){
-                    weekServiceWithStudent.setExercisesMessageTimelyNum(exercisesMessageTimelyNum>0?1:0);
                 }
             }
         }

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

@@ -22,6 +22,7 @@
 		<result column="is_view_" property="isView" />
 		<result column="organ_name_" property="organName" />
 		<result column="submit_time_" property="submitTime" />
+		<association property="extracurricularExercises" columnPrefix="ee_" resultMap="com.ym.mec.biz.dal.dao.ExtracurricularExercisesDao.ExtracurricularExercises"/>
 	</resultMap>
 
 	<resultMap id="ExtraExerciseStudentsDto" type="com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto" extends="ExtracurricularExercisesReply">
@@ -485,9 +486,11 @@
 			eer.status_,
 			eer.submit_time_,
 			eer.is_replied_,
-			eer.is_replied_timely_
+			eer.is_replied_timely_,
+			ee.teacher_id_ ee_teacher_id_
 		FROM
 			extracurricular_exercises_reply eer
+			LEFT JOIN extracurricular_exercises ee ON eer.extracurricular_exercises_id_=ee.id_
 		WHERE
 			DATE_FORMAT( eer.create_time_, '%Y-%m-%d' ) BETWEEN #{startDate} AND #{endDate}
 	</select>

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

@@ -594,7 +594,7 @@
     <select id="getFeeByType" resultType="com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto">
         SELECT MAX(spo.expect_amount_)                                expectAmount,
                SUM(IF(g.type_ = 'INSTRUMENT', so.expect_amount_, 0))  musicalFee,
-               SUM(IF(g.type_ != 'INSTRUMENT', so.expect_amount_, 0)) teachingFee
+               SUM(IF(g.type_ != 'INSTRUMENT' || g.type_ IS NULL, so.expect_amount_, 0)) teachingFee
         FROM student_payment_order spo
                  LEFT JOIN sell_order so ON spo.id_ = so.order_id_
                  LEFT JOIN goods g ON IF(so.parent_goods_id_ IS NOT NULL,g.id_ = so.parent_goods_id_,g.id_ = so.goods_id_)

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -177,6 +177,12 @@
 	</delete>
 	<delete id="deleteByMonday">
 		DELETE FROM student_extracurricular_exercises_situation_ WHERE monday_ = #{monday}
+		<if test="studentIds!=null and studentIds.size()>0">
+			AND student_id_ IN
+			<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+				#{studentId}
+			</foreach>
+		</if>
 	</delete>
 	<delete id="deleteByStudent">
 		DELETE FROM student_extracurricular_exercises_situation_ WHERE student_id_ = #{studentId}

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

@@ -215,6 +215,9 @@
             <if test="updateTime != null">
                 update_time_ = NOW(),
             </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
             <if test="parentsCompany != null">
                 parents_company_ = #{parentsCompany},
             </if>
@@ -719,8 +722,10 @@
     	select sr.*,s.name_ subject_name_,mg.status_ music_group_status_,mg.name_ music_group_name_,mgq.status_ music_group_quit_status_ 
     	from student_registration sr left join subject s on s.id_ = sr.actual_subject_id_
     	left join music_group mg on sr.music_group_id_ = mg.id_
-    	left join (select * from music_group_quit where id_ in (select max(id_) from music_group_quit group by music_group_id_)) mgq  on mgq.music_group_id_ = mg.id_
-    	where sr.user_id_ = #{userId}
+    	left join (select mgq.* from music_group_quit mgq 
+		 where mgq.id_ in (select max(id_) from music_group_quit group by music_group_id_,user_id_)) mgq  ON mgq.music_group_id_ = sr.music_group_id_ 
+		 AND mgq.user_id_ = sr.user_id_ AND mgq.join_date_ = sr.create_time_
+    	where sr.user_id_ = #{userId} 
     	order by sr.id_ 
     </select>
 </mapper>

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

@@ -142,18 +142,18 @@ public class StudentOrderController extends BaseController {
             VipBuyResultDto vipBuyResultInfo = vipGroupService.findVipBuyResultInfo(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
             orderDetail.put("detail", vipBuyResultInfo);
         } else if (orderByOrderNo.getGroupType().equals(GroupType.SPORADIC)) {
-            if(Objects.nonNull(orderByOrderNo.getMusicGroupId())){
+            if (Objects.nonNull(orderByOrderNo.getMusicGroupId())) {
                 SporadicChargeInfo info = sporadicChargeInfoService.get(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
                 orderDetail.put("detail", info);
             }
             if (orderByOrderNo.getType().equals(OrderTypeEnum.DOUBLE_ELEVEN2020)) {
                 LuckDrawCount luckDrawCount = luckDrawCountService.get(orderByOrderNo.getUserId().longValue());
-                orderDetail.put("drawTimes", luckDrawCount==null? 0: luckDrawCount.getAvailableCount());
-            }else if(OrderTypeEnum.DEGREE_REGISTRATION.equals(orderByOrderNo.getType())){
+                orderDetail.put("drawTimes", luckDrawCount == null ? 0 : luckDrawCount.getAvailableCount());
+            } else if (OrderTypeEnum.DEGREE_REGISTRATION.equals(orderByOrderNo.getType())) {
                 DegreeRegistration degreeRegistration = degreeRegistrationDao.get(orderByOrderNo.getClassGroupId());
                 orderDetail.put("degree", degreeRegistration);
                 List<StudentPaymentOrderDetail> studentPaymentOrderDetails = studentPaymentOrderDetailService.getOrderDetail(orderByOrderNo.getId());
-                if(!CollectionUtils.isEmpty(studentPaymentOrderDetails)){
+                if (!CollectionUtils.isEmpty(studentPaymentOrderDetails)) {
                     orderDetail.put("additionCourseInfo", studentPaymentOrderDetails.get(0).getGoodsIdList());
                 }
             }
@@ -245,22 +245,24 @@ public class StudentOrderController extends BaseController {
         paymentParams.put("goods_title", orderSubject);
         paymentParams.put("goods_desc", orderBody);
         paymentParams.put("time_expire", timeExpire);
-
-        List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(orderNo);
-        List<Map<String, Object>> divMembers = new ArrayList<>();
-        for (StudentPaymentRouteOrder routeOrder : routeOrders) {
-            Map<String, Object> divMember = new HashMap<>();
-            divMember.put("member_id", routeOrder.getMerNo());//分佣账户
-            divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
-            divMember.put("fee_flag", routeOrder.getFeeFlag());
-            if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
-                divMember.put("member_id", 0);
-            }
-            divMembers.add(divMember);
-        }
-        if (divMembers.size() > 0) {
-            paymentParams.put("div_members", JSON.toJSONString(divMembers));
-        }
+        paymentParams.put("pay_mode", "delay");
+
+        //延时分账时不需要
+//        List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(orderNo);
+//        List<Map<String, Object>> divMembers = new ArrayList<>();
+//        for (StudentPaymentRouteOrder routeOrder : routeOrders) {
+//            Map<String, Object> divMember = new HashMap<>();
+//            divMember.put("member_id", routeOrder.getMerNo());//分佣账户
+//            divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
+//            divMember.put("fee_flag", routeOrder.getFeeFlag());
+//            if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
+//                divMember.put("member_id", 0);
+//            }
+//            divMembers.add(divMember);
+//        }
+//        if (divMembers.size() > 0) {
+//            paymentParams.put("div_members", JSON.toJSONString(divMembers));
+//        }
 
         Map<String, Object> expendParams = new HashMap<>(5);
 
@@ -331,6 +333,7 @@ public class StudentOrderController extends BaseController {
             rpMap.put("merOrderNo", payingOrder.getOrderNo());
             rpMap.put("orderNo", payingOrder.getOrderNo());
             rpMap.put("channelType", "1");
+            rpMap.put("simulation", "1");
 
             String channelType = rpMap.get("channelType").equals("1") ? "WXPay" : (rpMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
             rpMap.put("channelType", channelType);

+ 24 - 19
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java

@@ -32,6 +32,24 @@ public class Payment {
         return payment;
     }
 
+
+    /**
+     * 创建确认对象
+     *
+     * @return 查询的支付对象
+     * @throws Exception 异常
+     */
+    public static Map<String, Object> createConfirm(Map<String, Object> confirm) throws Exception {
+        confirm = com.huifu.adapay.model.Payment.createConfirm(confirm);
+
+        String error_code = (String) confirm.get("error_code");
+        if (null != error_code) {
+            String errorMsg = (String) confirm.get("error_msg");
+            throw new ThirdpartyException(errorMsg);
+        }
+        return confirm;
+    }
+
     /**
      * 关闭一个支付交易
      *
@@ -40,32 +58,19 @@ public class Payment {
      * @throws Exception 异常
      */
     public static Map<String, Object> closePayment(String paymentId) throws Exception {
-        System.out.println("=======close payment begin=======");
-        //关闭支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id11
-        //调用sdk方法,关闭支付,得到支付对象
         Map<String, Object> payment = new HashMap<>();
         Map<String, Object> paymentParams = new HashMap<>(10);
         paymentParams.put("payment_id", paymentId);
-        try {
-            paymentParams.put("payment_id", paymentId);
-            paymentParams.put("reason", "reason");
-            paymentParams.put("expend", "expend");
-            paymentParams.put("notify_url", "notify_url");
-            System.out.println("关单请求参数:" + JSON.toJSONString(paymentId));
-            payment = com.huifu.adapay.model.Payment.close(paymentParams);
-        } catch (ThirdpartyException e) {
-            e.printStackTrace();
-        }
-
+        paymentParams.put("reason", "reason");
+        paymentParams.put("expend", "expend");
+        paymentParams.put("notify_url", "notify_url");
+        payment = com.huifu.adapay.model.Payment.close(paymentParams);
 
         String error_code = (String) payment.get("error_code");
         if (null != error_code) {
-            System.out.println("关单返回参数:" + JSON.toJSONString(payment));
-            String error_msg = (String) payment.get("error_msg");
-            System.out.println("error_code:" + error_code + "............." + error_msg);
+            String errorMsg = (String) payment.get("error_msg");
+            throw new ThirdpartyException(errorMsg);
         }
-
-
         return payment;
     }
 

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

@@ -138,7 +138,7 @@ public class AdapayController extends BaseController {
         long createdLte = DateUtil.getLastSecondWithDay(endTime).getTime();
         int pageIndex = 1;
         List<Map<String, Object>> data = new ArrayList<>();
-        while (profiles.equals("dev")) {
+        while (profiles.equals("prod")) {
             Map<String, Object> paymentList = Payment.queryList(pageIndex, createdGte, createdLte);
             JSONArray payments = (JSONArray) paymentList.get("payments");
             if (!paymentList.get("status").equals("succeeded")) {

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

@@ -1,5 +1,6 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.dal.dao.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -31,18 +32,6 @@ 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.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
-import com.ym.mec.biz.dal.dao.EmployeeDao;
-import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.PracticeGroupDao;
-import com.ym.mec.biz.dal.dao.SellOrderDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.VipGroupDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.CourseGroupExportDto;
 import com.ym.mec.biz.dal.dto.CourseReviewDto;
@@ -229,6 +218,8 @@ public class ExportController extends BaseController {
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
     @Autowired
     private SellOrderDao sellOrderDao;
+    @Autowired
+    private SysConfigDao sysConfigDao;
 
     @ApiOperation(value = "学员考勤记录导出")
     @PostMapping("export/exportStudentAttendances")
@@ -2169,7 +2160,11 @@ public class ExportController extends BaseController {
             if (row.getBalancePaymentAmount() == null) {
                 row.setBalancePaymentAmount(BigDecimal.ZERO);
             }
-            BigDecimal transferFee = (row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP);
+            String delayRouteStartDate = sysConfigDao.findConfigValue("delay_route_start_date");
+            if (row.getCreateTime().after(Objects.requireNonNull(DateUtil.stringToDate(delayRouteStartDate, "yyyy-MM-dd HH:mm:ss")))) {
+                transferFee = row.getRouteAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP);
+            }
             row.setTransferFee(transferFee);
             BigDecimal musicalFee = BigDecimal.ZERO;
             BigDecimal teachingFee = BigDecimal.ZERO;