Explorar el Código

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

zouxuan hace 5 años
padre
commit
fe0a68436d

+ 10 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleEvaluateDao.java

@@ -1,13 +1,10 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.PracticeGroupsDto;
-import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
-import com.ym.mec.biz.dal.entity.TeacherCourseStatistics;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
-import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -26,4 +23,13 @@ public interface CourseScheduleEvaluateDao extends BaseDAO<Long, CourseScheduleE
     List<PracticeGroupsDto> getOrganPracticeGroups();
 
     List<PracticeGroupsDto> getOrganMoney();
-}
+
+    /**
+     * @describe 推送指定时间及之前的未推送的报告
+     * @author Joburgess
+     * @date 2020/2/28
+     * @param expiredDate:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleEvaluate>
+     */
+    List<CourseScheduleEvaluate> findExpiredDateBeforeReport(@Param("expiredDate")Date expiredDate);
+}

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleEvaluate.java

@@ -43,6 +43,16 @@ public class CourseScheduleEvaluate {
     @ApiModelProperty(value = "总分钟数")
     private Integer totalMinutes;
 
+    private Integer isPushed;
+
+    public Integer getIsPushed() {
+        return isPushed;
+    }
+
+    public void setIsPushed(Integer isPushed) {
+        this.isPushed = isPushed;
+    }
+
     public Long getId() {
         return id;
     }
@@ -154,4 +164,4 @@ public class CourseScheduleEvaluate {
     public void setTotalMinutes(Integer totalMinutes) {
         this.totalMinutes = totalMinutes;
     }
-}
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java

@@ -242,4 +242,14 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 	 * @return void
 	 */
 	HttpResponseResult cancelWaitPayOrder(Integer userId, Integer groupId);
+
+	/**
+	 * @describe 推送练习报告
+	 * @author Joburgess
+	 * @date 2020/2/28
+	 * @param expiredDate: 报告的截至时间
+	 * @param pushType: 推送类型:JIGUANG、SMS、ALL
+	 * @return void
+	 */
+	void pushStudyReport(Date expiredDate,String pushType);
 }

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

@@ -25,6 +25,7 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.http.HttpUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -115,6 +116,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     private ContractService contractService;
     @Autowired
     private PracticeLessonApplyDao practiceLessonApplyDao;
+    @Autowired
+    private CourseScheduleEvaluateDao courseScheduleEvaluateDao;
 
     private static Map<Integer, Map<Integer, List<Integer>>> schoolSubjectTeachersMap;
 
@@ -2989,10 +2992,26 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if(!studentPaymentOrder.getStatus().equals(DealStatusEnum.ING)){
             return;
         }
+        SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(order.getUserId());
         List<StudentPaymentOrder> userGroupOrders = studentPaymentOrderDao.findUserGroupOrders(order.getUserId(), order.getMusicGroupId(), order.getGroupType(),null);
         Map<DealStatusEnum, Long> statusOrderNumMap = userGroupOrders.stream().collect(Collectors.groupingBy(StudentPaymentOrder::getStatus, Collectors.counting()));
         Long successOrderNum=statusOrderNumMap.get(DealStatusEnum.SUCCESS);
         if(Objects.nonNull(successOrderNum)&&successOrderNum>0){
+            if(order.getStatus().equals(DealStatusEnum.FAILED)&&Objects.nonNull(order.getBalancePaymentAmount())){
+                sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "网管课购买失败");
+                SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
+                sysUserIncomeCashAccountDetail.setUserId(order.getUserId());
+                sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+                sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+                sysUserIncomeCashAccountDetail.setAmount(order.getBalancePaymentAmount());
+                sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getBalancePaymentAmount()));
+                sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo());
+                sysUserIncomeCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+                sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount());
+                sysUserIncomeCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount());
+                sysUserIncomeCashAccountDetail.setDescription("网管课支付失败,退还余额");
+                sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
+            }
             studentPaymentOrderDao.update(order);
             return;
         }
@@ -3001,6 +3020,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if(Objects.nonNull(ingOrderNum)&&ingOrderNum>1&&order.getStatus().equals(DealStatusEnum.FAILED)){
             if(Objects.nonNull(order.getBalancePaymentAmount())){
                 sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "网管课购买失败");
+                SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
+                sysUserIncomeCashAccountDetail.setUserId(order.getUserId());
+                sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+                sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+                sysUserIncomeCashAccountDetail.setAmount(order.getBalancePaymentAmount());
+                sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getBalancePaymentAmount()));
+                sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo());
+                sysUserIncomeCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+                sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount());
+                sysUserIncomeCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount());
+                sysUserIncomeCashAccountDetail.setDescription("网管课支付失败,退还余额");
+                sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
             }
             studentPaymentOrderDao.update(order);
             return;
@@ -3011,6 +3042,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }else{
             if(Objects.nonNull(order.getBalancePaymentAmount())){
                 sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "网管课购买失败");
+                SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
+                sysUserIncomeCashAccountDetail.setUserId(order.getUserId());
+                sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+                sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+                sysUserIncomeCashAccountDetail.setAmount(order.getBalancePaymentAmount());
+                sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getBalancePaymentAmount()));
+                sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo());
+                sysUserIncomeCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+                sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount());
+                sysUserIncomeCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount());
+                sysUserIncomeCashAccountDetail.setDescription("网管课支付失败,退还余额");
+                sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
             }
             studentPaymentOrderDao.update(order);
             PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(order.getMusicGroupId()));
@@ -3020,7 +3063,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             return;
         }
         studentPaymentOrderDao.update(order);
-        SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(order.getUserId());
 
         //插入缴费明细
         //收入
@@ -3067,7 +3109,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         try {
             contractService.transferPracticeCoursesContract(order.getUserId(),classGroup.getTotalClassTimes(),practiceGroup.getCoursesStartDate(),practiceGroup.getCoursesExpireDate(),order.getExpectAmount());
         } catch (Exception e) {
-            LOGGER.error("陪练课[{}]购买协议错误:{}",order.getMusicGroupId(),e.getMessage(),e.getMessage());
+            LOGGER.error("网管课[{}]购买协议错误:{}",order.getMusicGroupId(),e.getMessage(),e.getMessage());
         }
 
         Teacher teacher = teacherService.getDetail(practiceGroup.getUserId());
@@ -3211,8 +3253,14 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             return BaseController.failed(HttpStatus.FAILED_DEPENDENCY, "该课程组已失效,请重新购买");
         }
 
+        String orderNo=idGeneratorService.generatorId("payment") + "";
+
+        newOrder.setOrderNo(orderNo);
         newOrder.setActualAmount(newOrder.getExpectAmount());
+        newOrder.setMerNos(null);
         newOrder.setBalancePaymentAmount(new BigDecimal(0));
+        newOrder.setComAmount(null);
+        newOrder.setPerAmount(null);
         newOrder.setStatus(DealStatusEnum.ING);
         newOrder.setVersion(0);
         studentPaymentOrderService.insert(newOrder);
@@ -3251,7 +3299,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             }
         }
 
-        String orderNo=idGeneratorService.generatorId("payment") + "";
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
         Map<String, BigDecimal> classFee = new HashMap<>();
         classFee.put("course",newOrder.getActualAmount());
@@ -3273,7 +3320,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
             Map<String,BigDecimal> routingFee = (Map<String,BigDecimal>)payMap.get("routingFee");
             newOrder.setStatus(DealStatusEnum.ING);
-            newOrder.setOrderNo(orderNo);
             newOrder.setOrganId(practiceGroup.getOrganId());
             newOrder.setComAmount(routingFee.get("COM"));
             newOrder.setPerAmount(routingFee.get("PER"));
@@ -3332,4 +3378,51 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }
         return BaseController.succeed();
     }
+
+    @Override
+    public void pushStudyReport(Date expiredDate, String pushType) {
+        if(Objects.isNull(expiredDate)){
+            throw new BizException("请指定推送报告的截至日期");
+        }
+
+        if(StringUtils.isBlank(pushType)){
+            throw new BizException("请指定推送类型:JIGUANG、SMS、ALL");
+        }
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+
+        List<CourseScheduleEvaluate> reports = courseScheduleEvaluateDao.findExpiredDateBeforeReport(expiredDate);
+
+        for (CourseScheduleEvaluate report : reports) {
+            PracticeGroup userFreePracticeGroup = practiceGroupDao.get(report.getId());
+            ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(userFreePracticeGroup.getId().toString(), GroupType.PRACTICE.getCode());
+
+            CourseScheduleEvaluate courseScheduleEvaluate = courseScheduleEvaluateDao.findByClassGroupId(classGroup.getId());
+            if(Objects.isNull(courseScheduleEvaluate)){
+                throw new BizException("未生成课程报告");
+            }
+
+            String pushUrl = baseApiUrl + "/#/reportDetail?classGroupId=" + classGroup.getId();
+
+            String smsUrl = baseApiUrl + "/#/transfer?url=http://mstudev.dayaedu.com&hash=reportDetail&classGroupId=" + classGroup.getId();
+
+            SysUser student = sysUserFeignService.queryUserById(userFreePracticeGroup.getStudentId());
+
+            if(pushType.equals("ALL")||pushType.equals("JIGUANG")){
+                Map<Integer, String> userMap = new HashMap<>();
+                userMap.put(userFreePracticeGroup.getStudentId(), userFreePracticeGroup.getStudentId().toString());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_COMPLETED_STUDY_REPORT,
+                        userMap, null, 0, "5?" + pushUrl, "STUDENT", pushUrl);
+            }
+
+            if(pushType.equals("ALL")||pushType.equals("SMS")){
+                Map<Integer, String> userPhoneMap = new HashMap<>();
+                userPhoneMap.put(userFreePracticeGroup.getStudentId(), student.getPhone());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.PRACTICE_COMPLETED_STUDY_REPORT,
+                        userPhoneMap, null, 0, null, "STUDENT", HttpUtil.getSortUrl(smsUrl));
+            }
+            report.setIsPushed(1);
+            courseScheduleEvaluateDao.update(report);
+        }
+    }
 }

+ 25 - 126
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1,135 +1,17 @@
 package com.ym.mec.biz.service.impl;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-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.function.Function;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
-import com.ym.mec.biz.dal.dao.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
-import com.ym.mec.biz.dal.dao.ClassGroupTeacherMapperDao;
-import com.ym.mec.biz.dal.dao.ClassGroupTeacherSalaryDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.StudentApplyRefundsDao;
-import com.ym.mec.biz.dal.dao.StudentAttendanceDao;
-import com.ym.mec.biz.dal.dao.StudentPauseInfoDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountDetailDao;
-import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dao.TeacherDefaultVipGroupSalaryDao;
-import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
-import com.ym.mec.biz.dal.dao.VipGroupCategoryDao;
-import com.ym.mec.biz.dal.dao.VipGroupDao;
-import com.ym.mec.biz.dal.dao.VipGroupDefaultClassesCycleDao;
-import com.ym.mec.biz.dal.dao.VipGroupDefaultClassesUnitPriceDao;
-import com.ym.mec.biz.dal.dto.RewardsRulesJsonDto;
-import com.ym.mec.biz.dal.dto.StudentCourseInfoDto;
-import com.ym.mec.biz.dal.dto.StudentRecoverInfoDto;
-import com.ym.mec.biz.dal.dto.StudentVipGroupDetailDto;
-import com.ym.mec.biz.dal.dto.TaskRewardsRulesDto;
-import com.ym.mec.biz.dal.dto.TeacherBasicDto;
-import com.ym.mec.biz.dal.dto.TeachingRecordBaseInfo;
-import com.ym.mec.biz.dal.dto.VipBuyResultDto;
-import com.ym.mec.biz.dal.dto.VipCourseStudentInfoDto;
-import com.ym.mec.biz.dal.dto.VipGroupApplyBaseInfoDto;
-import com.ym.mec.biz.dal.dto.VipGroupApplyDto;
-import com.ym.mec.biz.dal.dto.VipGroupBuyParamsDto;
-import com.ym.mec.biz.dal.dto.VipGroupCostCountDto;
-import com.ym.mec.biz.dal.dto.VipGroupCostCountParamsDto;
-import com.ym.mec.biz.dal.dto.VipGroupManageDetailDto;
-import com.ym.mec.biz.dal.dto.VipGroupPayInfoDto;
-import com.ym.mec.biz.dal.dto.VipGroupSalaryBaseInfo;
-import com.ym.mec.biz.dal.dto.VipGroupSalaryDto;
-import com.ym.mec.biz.dal.dto.VipGroupSalarySettlementDto;
-import com.ym.mec.biz.dal.dto.VipGroupStudentDto;
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherSalary;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.entity.CourseScheduleRewardsRules;
-import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
-import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
-import com.ym.mec.biz.dal.entity.School;
-import com.ym.mec.biz.dal.entity.StudentApplyRefunds;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.StudentApplyRefunds.StudentApplyRefundsStatus;
-import com.ym.mec.biz.dal.entity.StudentPauseInfo;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentRecoverDto;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
-import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
-import com.ym.mec.biz.dal.entity.Teacher;
-import com.ym.mec.biz.dal.entity.TeacherDefaultVipGroupSalary;
-import com.ym.mec.biz.dal.entity.VipGroup;
-import com.ym.mec.biz.dal.entity.VipGroupActivity;
-import com.ym.mec.biz.dal.entity.VipGroupCategory;
-import com.ym.mec.biz.dal.entity.VipGroupDefaultClassesCycle;
-import com.ym.mec.biz.dal.entity.VipGroupDefaultClassesUnitPrice;
-import com.ym.mec.biz.dal.enums.AuditStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
-import com.ym.mec.biz.dal.enums.VipGroupActivityTypeEnum;
-import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
-import com.ym.mec.biz.dal.page.VipGroupAttendanceQueryInfo;
-import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
-import com.ym.mec.biz.dal.page.VipGroupSalaryQueryInfo;
-import com.ym.mec.biz.dal.page.VipGroupTeachingRecordQueryInfo;
-import com.ym.mec.biz.service.ClassGroupService;
-import com.ym.mec.biz.service.ContractService;
-import com.ym.mec.biz.service.CourseScheduleRewardsRulesService;
-import com.ym.mec.biz.service.CourseScheduleService;
-import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
-import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
-import com.ym.mec.biz.service.PayService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysMessageService;
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
-import com.ym.mec.biz.service.TeacherService;
-import com.ym.mec.biz.service.VipGroupService;
+import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
@@ -142,6 +24,22 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Service
 public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> implements VipGroupService {
@@ -1341,7 +1239,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	}
 
 	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void orderCallback(StudentPaymentOrder order) {
 		/*
 		根据回调信息调整订单状态及vip课程状态等相关信息
@@ -1433,7 +1331,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		HashSet<Integer> hashSet = new HashSet<>(organIds);
 		String organIdsString = StringUtils.join(hashSet, ",");
 		vipGroup.setOrganIdList(organIdsString);
-		if(classGroup.getExpectStudentNum().equals(classGroup.getStudentNum())){
+		classGroup=classGroupDao.get(order.getClassGroupId());
+		if(classGroup.getDelFlag()==0&&classGroup.getExpectStudentNum().equals(classGroup.getStudentNum())){
 			vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
 		}
 		vipGroupDao.update(vipGroup);

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

@@ -12,6 +12,7 @@
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="student_id_" jdbcType="INTEGER" property="studentId"/>
         <result column="subject_name_" jdbcType="VARCHAR" property="subjectName"/>
+        <result column="is_pushed_" jdbcType="INTEGER" property="isPushed"/>
     </resultMap>
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleEvaluate" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
@@ -23,6 +24,10 @@
                 #{createTime,jdbcType=TIMESTAMP})
     </insert>
 
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleEvaluate">
+        update course_schedule_evaluate set is_pushed_=#{isPushed} where id_=#{id}
+    </update>
+
     <select id="findByClassGroupId" resultMap="CourseScheduleEvaluate">
         SELECT cse.*, s.name_ subject_name_, pg.student_id_
         FROM course_schedule_evaluate cse
@@ -98,4 +103,9 @@
         WHERE group_type_='PRACTICE' AND status_='SUCCESS'
         GROUP BY organ_id_
     </select>
-</mapper>
+    <select id="findExpiredDateBeforeReport" resultMap="CourseScheduleEvaluate">
+      SELECT * FROM course_schedule_evaluate
+      WHERE DATE_FORMATE(create_time_, '%Y-%m-%d') &lt;= DATE_FORMATE(#{expiredDate}, '%Y-%m-%d')
+      AND (is_pushed_ = 0 OR is_pushed_ IS NULL)
+    </select>
+</mapper>

+ 11 - 0
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -248,6 +248,17 @@ public class PracticeGroupController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("陪练课完成报告推送")
+    @GetMapping(value = "/pushStudyReport")
+    public HttpResponseResult pushStudyReport(Date expiredDate, String pushType){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        practiceGroupService.pushStudyReport(expiredDate,pushType);
+        return succeed();
+    }
+
     @ApiOperation("检测用户是否存在待支付的课程组订单")
     @GetMapping(value = "/checkExistWaitPayOrder")
     public HttpResponseResult checkExistWaitPayOrder(){