|  | @@ -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);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |