Quellcode durchsuchen

增加齐齐哈尔活动购买会员功能

hgw vor 3 Jahren
Ursprung
Commit
b0f49025cd

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MemberPayParamDto.java

@@ -2,13 +2,16 @@ package com.ym.mec.biz.dal.dto;
 
 import java.math.BigDecimal;
 
-public class MemberPayParamDto extends PayParamBasicDto{
+public class MemberPayParamDto extends PayParamBasicDto {
 
     //前端录入实际缴费金额
     private BigDecimal amount;
 
     private Long paymentId;
 
+    //购买数量
+    private int val;
+
     public BigDecimal getAmount() {
         return amount;
     }
@@ -24,4 +27,12 @@ public class MemberPayParamDto extends PayParamBasicDto{
     public void setPaymentId(Long paymentId) {
         this.paymentId = paymentId;
     }
+
+    public int getVal() {
+        return val;
+    }
+
+    public void setVal(int val) {
+        this.val = val;
+    }
 }

+ 21 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankSettingService.java

@@ -12,26 +12,30 @@ import java.util.List;
 
 public interface MemberRankSettingService extends BaseService<Integer, MemberRankSetting> {
 
-	void add(MemberRankSetting memberRankSetting);
+    void add(MemberRankSetting memberRankSetting);
 
-	MemberRankSetting getDetail(Integer memberRankSettingId);
+    MemberRankSetting getDetail(Integer memberRankSettingId);
 
-	void updateSetting(MemberRankSetting memberRankSetting);
+    void updateSetting(MemberRankSetting memberRankSetting);
 
-	List<MemberRankSetting> queryListByIsDefault(Boolean isDefault);
+    List<MemberRankSetting> queryListByIsDefault(Boolean isDefault);
 
-	/**
-	 * 会员购买
-	 * @return
-	 */
-	HttpResponseResult buy(MemberPayParamDto memberPayParamDto) throws Exception;
-	
-	/**
-	 * 订单回调
-	 * @param studentPaymentOrder
-	 * @return
-	 */
-	boolean orderCallback(StudentPaymentOrder studentPaymentOrder);
+    /**
+     * 会员购买
+     *
+     * @return
+     */
+    HttpResponseResult buy(MemberPayParamDto memberPayParamDto) throws Exception;
 
-	HttpResponseResult ActiveBuy(Integer id, Integer memberRankId, PeriodEnum month, BigDecimal amount, boolean isUseBalance, Integer buyNum, int giveNum, int activeRemark, String remark, boolean repay) throws Exception;
+    HttpResponseResult buy2Qqhe(MemberPayParamDto memberPayParamDto) throws Exception;
+
+    /**
+     * 订单回调
+     *
+     * @param studentPaymentOrder
+     * @return
+     */
+    boolean orderCallback(StudentPaymentOrder studentPaymentOrder);
+
+    HttpResponseResult ActiveBuy(Integer id, Integer memberRankId, PeriodEnum month, BigDecimal amount, boolean isUseBalance, Integer buyNum, int giveNum, int activeRemark, String remark, boolean repay) throws Exception;
 }

+ 414 - 277
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -4,6 +4,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.MemberRankPrivilegesDao;
 import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.MemberPayParamDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
@@ -14,8 +15,13 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.joda.time.LocalDate;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,281 +32,412 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.function.BiPredicate;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.CouponDetailTypeEnum.MEMBER;
+
 @Service
 public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, MemberRankSetting> implements MemberRankSettingService {
 
-	@Autowired
-	private MemberRankSettingDao memberRankSettingDao;
-	@Autowired
-	private MemberRankPrivilegesDao memberRankPrivilegesDao;
-	@Autowired
-	private StudentService studentService;
-	@Autowired
-	private StudentPaymentOrderService studentPaymentOrderService;
-	@Autowired
-	private SysUserCashAccountService sysUserCashAccountService;
-	@Autowired
-	private SysUserCashAccountDetailService sysUserCashAccountDetailService;
-	@Autowired
-	private ContractService contractService;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private CloudTeacherOrderService cloudTeacherOrderService;
-	@Autowired
-	private IdGeneratorService idGeneratorService;
-	@Autowired
-	private SysCouponCodeService sysCouponCodeService;
-	@Autowired
-	private StudentCloudCoachPaymentDetailsService studentCloudCoachPaymentDetailsService;
-	@Autowired
-	private CloudCoachPaymentProgramService cloudCoachPaymentProgramService;
+    @Autowired
+    private MemberRankSettingDao memberRankSettingDao;
+    @Autowired
+    private MemberRankPrivilegesDao memberRankPrivilegesDao;
+    @Autowired
+    private StudentService studentService;
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+    @Autowired
+    private SysUserCashAccountService sysUserCashAccountService;
+    @Autowired
+    private SysUserCashAccountDetailService sysUserCashAccountDetailService;
+    @Autowired
+    private ContractService contractService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private CloudTeacherOrderService cloudTeacherOrderService;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+    @Autowired
+    private SysCouponCodeService sysCouponCodeService;
+    @Autowired
+    private StudentCloudCoachPaymentDetailsService studentCloudCoachPaymentDetailsService;
+    @Autowired
+    private CloudCoachPaymentProgramService cloudCoachPaymentProgramService;
+    @Autowired
+    private RedissonClient redissonClient;
+    @Autowired
+    private SysConfigDao sysConfigDao;
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @Override
+    public BaseDAO<Integer, MemberRankSetting> getDAO() {
+        return memberRankSettingDao;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(MemberRankSetting memberRankSetting) {
+        memberRankSettingDao.insert(memberRankSetting);
+        List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
+        if (memberPrivilegesItemIdList == null || memberPrivilegesItemIdList.size() == 0) {
+            throw new BizException("操作失败:请配置会员权益");
+        }
+        memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(), memberPrivilegesItemIdList);
+    }
 
-	private final Logger logger = LoggerFactory.getLogger(this.getClass());
+    @Override
+    public MemberRankSetting getDetail(Integer memberRankSettingId) {
+        MemberRankSetting memberRankSetting = memberRankSettingDao.get(memberRankSettingId);
+        List<MemberRankPrivileges> byRankSettingId = memberRankPrivilegesDao.findByRankSettingId(memberRankSettingId);
+        if (byRankSettingId != null && byRankSettingId.size() > 0) {
+            memberRankSetting.setMemberRankPrivileges(byRankSettingId);
+            memberRankSetting.setMemberPrivilegesItemIdList(byRankSettingId.stream().map(e -> e.getMemberPrivilegesId()).collect(Collectors.toList()));
+        }
+        return memberRankSetting;
+    }
 
-	@Override
-	public BaseDAO<Integer, MemberRankSetting> getDAO() {
-		return memberRankSettingDao;
-	}
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateSetting(MemberRankSetting memberRankSetting) {
+        memberRankSettingDao.update(memberRankSetting);
+        memberRankPrivilegesDao.deleteByRankSettingId(memberRankSetting.getId());
+        List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
+        if (memberPrivilegesItemIdList != null && memberPrivilegesItemIdList.size() > 0) {
+            memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(), memberPrivilegesItemIdList);
+        }
+    }
 
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void add(MemberRankSetting memberRankSetting) {
-		memberRankSettingDao.insert(memberRankSetting);
-		List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
-		if (memberPrivilegesItemIdList == null || memberPrivilegesItemIdList.size() == 0) {
-			throw new BizException("操作失败:请配置会员权益");
-		}
-		memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(), memberPrivilegesItemIdList);
-	}
+    @Override
+    public List<MemberRankSetting> queryListByIsDefault(Boolean isDefault) {
+        return memberRankSettingDao.queryListByIsDefault(isDefault);
+    }
 
-	@Override
-	public MemberRankSetting getDetail(Integer memberRankSettingId) {
-		MemberRankSetting memberRankSetting = memberRankSettingDao.get(memberRankSettingId);
-		List<MemberRankPrivileges> byRankSettingId = memberRankPrivilegesDao.findByRankSettingId(memberRankSettingId);
-		if (byRankSettingId != null && byRankSettingId.size() > 0) {
-			memberRankSetting.setMemberRankPrivileges(byRankSettingId);
-			memberRankSetting.setMemberPrivilegesItemIdList(byRankSettingId.stream().map(e -> e.getMemberPrivilegesId()).collect(Collectors.toList()));
-		}
-		return memberRankSetting;
-	}
+    //原有购买会员支付接口  思路:分部等于59的时候 修改计算时间的地方 按齐齐哈尔的来
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult buy(MemberPayParamDto memberPayParamDto) throws Exception {
+        logger.info("团练宝购买:memberPayParamDto:{} ", memberPayParamDto);
+        Long paymentId = memberPayParamDto.getPaymentId();
+        CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(paymentId);
+        if (cloudCoachPaymentProgram == null) {
+            throw new BizException("团练宝缴费订单不存在,请联系指导老师");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        StudentCloudCoachPaymentDetails cloudCoachPaymentDetails = studentCloudCoachPaymentDetailsService.findByUserId(paymentId, sysUser.getId());
+        if (cloudCoachPaymentDetails == null) {
+            throw new BizException("您不在当前团练宝缴费项目中,请联系指导老师");
+        }
+        if (cloudCoachPaymentDetails.getPaymentStatus() == 1) {
+            throw new BizException("当前团练宝订单已支付,感谢您的支持");
+        }
+        //判断用户是否已存在订单
+        List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.queryByDealStatus(paymentId.toString(), OrderTypeEnum.MEMBER, DealStatusEnum.ING);
+        if (CollectionUtils.isNotEmpty(applyOrderList)) {
+            HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(applyOrderList.get(0), memberPayParamDto.getRepeatPay());
+            if (result.getCode() != 200) {
+                return result;
+            }
+        }
 
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void updateSetting(MemberRankSetting memberRankSetting) {
-		memberRankSettingDao.update(memberRankSetting);
-		memberRankPrivilegesDao.deleteByRankSettingId(memberRankSetting.getId());
-		List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
-		if (memberPrivilegesItemIdList != null && memberPrivilegesItemIdList.size() > 0) {
-			memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(), memberPrivilegesItemIdList);
-		}
-	}
+        Integer userId = cloudCoachPaymentDetails.getUserId();
+        Student student = studentService.getLocked(userId);
+        if (student == null) {
+            throw new BizException("非法访问");
+        }
+        SysUser user = sysUserFeignService.queryUserById(userId);
 
-	@Override
-	public List<MemberRankSetting> queryListByIsDefault(Boolean isDefault) {
-		return memberRankSettingDao.queryListByIsDefault(isDefault);
-	}
+        Integer organId = user.getOrganId();
+        if (organId == null) {
+            throw new BizException("学生没有分部编号");
+        }
+        BigDecimal actualAmount = cloudCoachPaymentProgram.getActualAmount();
+        //优惠券使用范围
+        String[] checkCoupon = CouponDetailTypeEnum.getAllowType(MEMBER);
+        //校验优惠券
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(memberPayParamDto.getCouponIdList(), actualAmount, true, checkCoupon);
+        studentPaymentOrder.setMusicGroupId(paymentId.toString());
+        studentPaymentOrder.setMemo(cloudCoachPaymentProgram.getRemark());
+        Map<String, Object> result = getMap(memberPayParamDto.getAmount(), memberPayParamDto.getUseBalancePayment(), userId, organId, studentPaymentOrder);
+        return BaseController.succeed(result);
+    }
 
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public HttpResponseResult buy(MemberPayParamDto memberPayParamDto) throws Exception {
-		logger.info("团练宝购买:memberPayParamDto:{} ",memberPayParamDto);
-		Long paymentId = memberPayParamDto.getPaymentId();
-		CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(paymentId);
-		if(cloudCoachPaymentProgram == null){
-			throw new BizException("团练宝缴费订单不存在,请联系指导老师");
-		}
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		StudentCloudCoachPaymentDetails cloudCoachPaymentDetails = studentCloudCoachPaymentDetailsService.findByUserId(paymentId,sysUser.getId());
-		if(cloudCoachPaymentDetails == null){
-			throw new BizException("您不在当前团练宝缴费项目中,请联系指导老师");
-		}
-		if(cloudCoachPaymentDetails.getPaymentStatus() == 1){
-			throw new BizException("当前团练宝订单已支付,感谢您的支持");
-		}
-		//判断用户是否已存在订单
-		List<StudentPaymentOrder> applyOrderList = studentPaymentOrderService.queryByDealStatus(paymentId.toString(), OrderTypeEnum.MEMBER,DealStatusEnum.ING);
-		if (CollectionUtils.isNotEmpty(applyOrderList)) {
-			HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(applyOrderList.get(0), memberPayParamDto.getRepeatPay());
-			if (result.getCode() != 200) {
-				return result;
-			}
-		}
+    public static final String BUY_2_QQHE_LOCK = "BUY_2_QQHE_LOCK:";
 
-		Integer userId = cloudCoachPaymentDetails.getUserId();
-		Student student = studentService.getLocked(userId);
-		if (student == null) {
-			throw new BizException("非法访问");
-		}
-		SysUser user = sysUserFeignService.queryUserById(userId);
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult buy2Qqhe(MemberPayParamDto memberPayParamDto) throws Exception {
+        Optional<SysUser> sysUserOpt = Optional.ofNullable(sysUserFeignService.queryUserInfo());
+        SysUser sysUser = sysUserOpt.orElseThrow(() -> new BizException("未查询到学生信息,请重新登录!"));
+        sysUserOpt.map(SysUser::getId)
+                .map(studentService::getLocked)
+                .orElseThrow(() -> new BizException("非法访问"));
+        //防止重复点击
+        RBucket<Object> bucket = redissonClient.getBucket(BUY_2_QQHE_LOCK + sysUser.getId());
+        if (!bucket.trySet(1, 2, TimeUnit.SECONDS)) {
+            throw new BizException("请勿频繁操作!");
+        }
+        int val = memberPayParamDto.getVal();
+        if (val < 0) {
+            throw new BizException("最少购买1个月!");
+        }
+        if (val > 12) {
+            throw new BizException("最多购买12个月!");
+        }
+        //获取赠送的月份
+        BigDecimal giveMonth = getGiveMonth(val);
+        //转换格式
+        BigDecimal valDecimal = new BigDecimal(val);
+        //单价150 固定
+        BigDecimal price = new BigDecimal("150");
+        //计算出购买的价格 单价 X 购买的月份
+        BigDecimal amount = price.multiply(valDecimal);
+        //获取会员总激活时间
+        BigDecimal totalMonth = valDecimal.add(giveMonth);
+        //优惠券使用范围
+        String[] checkCoupon = CouponDetailTypeEnum.getAllowType(MEMBER);
+        //使用优惠券
+        StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(memberPayParamDto.getCouponIdList(), amount, true, checkCoupon);
+        //创建订单
+        Map<String, Object> result = getMap(memberPayParamDto.getAmount(), memberPayParamDto.getUseBalancePayment(), sysUser.getId(), sysUser.getOrganId(), studentPaymentOrder);
+        //写cloud order
+        LocalDate now = LocalDate.now();
+        CloudTeacherOrder cto = new CloudTeacherOrder();
+        cto.setStatus(0);//0 未生效
+        cto.setOrganId(sysUser.getOrganId());
+        cto.setStudentId(sysUser.getId());
+        cto.setType(PeriodEnum.MONTH);
+        cto.setLevel(1);
+        cto.setTime(totalMonth.intValue());
+        cto.setAmount(studentPaymentOrder.getActualAmount().add(studentPaymentOrder.getBalancePaymentAmount()));
+        cto.setStartTime(now.toDate());
+        cto.setEndTime(now.plusMonths(totalMonth.intValue()).toDate());
+        cto.setOrderId(studentPaymentOrder.getId());
+        cto.setCreateTime(new Date());
+        cloudTeacherOrderService.insert(cto);
+        //写入redis证明是活动购买
+        RBucket<Object> cache = redissonClient.getBucket(BUY_2_QQHE_LOCK + studentPaymentOrder.getOrderNo());
+        cache.set(memberPayParamDto, 35, TimeUnit.MINUTES);
 
-		Integer organId = user.getOrganId();
-		if (organId == null) {
-			throw new BizException("学生没有分部编号");
-		}
-		BigDecimal actualAmount = cloudCoachPaymentProgram.getActualAmount();
+        return BaseController.succeed(result);
+    }
 
-		Date date = new Date();
+    private BigDecimal getGiveMonth(int val) {
+        BigDecimal giveMonth;
+        //最小数o  最大数s
+        BiPredicate<Integer, Integer> predicate = (o, s) -> val >= o && val < s;
+        if (predicate.test(2, 4)) {
+            //购买2到4(不包含)之间月赠送1个月
+            giveMonth = BigDecimal.ONE;
+        } else if (predicate.test(4, 6)) {
+            //购买4到6(不包含)之间月赠送1个月
+            giveMonth = new BigDecimal("3");
+        } else if (val >= 6) {
+            //购买6(包含)个月以上送6个月
+            giveMonth = new BigDecimal("6");
+        } else {
+            //默认不赠送
+            giveMonth = BigDecimal.ZERO;
+        }
+        return giveMonth;
+    }
 
-		StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(memberPayParamDto.getCouponIdList(),actualAmount,true);
-		actualAmount = studentPaymentOrder.getActualAmount();
-		studentPaymentOrder.setUserId(userId);
-		studentPaymentOrder.setOrganId(organId);
-		studentPaymentOrder.setRoutingOrganId(organId);
-		studentPaymentOrder.setCreateTime(date);
-		studentPaymentOrder.setUpdateTime(date);
-		studentPaymentOrder.setBalancePaymentAmount(BigDecimal.ZERO);
-		studentPaymentOrder.setStatus(DealStatusEnum.ING);
-		studentPaymentOrder.setVersion(0);
-		studentPaymentOrder.setType(OrderTypeEnum.MEMBER);
-		studentPaymentOrder.setGroupType(GroupType.MEMBER);
-		studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
-		studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
-		studentPaymentOrder.setMemo(cloudCoachPaymentProgram.getRemark());
-		studentPaymentOrder.setPaymentChannel("BALANCE");
-		studentPaymentOrder.setMusicGroupId(paymentId.toString());
-		// 判断金额是否正确
-		if (actualAmount.compareTo(memberPayParamDto.getAmount()) != 0) {
-			throw new BizException("非法请求");
-		}
-		//使用余额支付
-		if (memberPayParamDto.getUseBalancePayment()) {
-			useBalanceAmount(studentPaymentOrder,"购买会员");
-		}
-		String orderNo = idGeneratorService.generatorId("payment") + "";
-		studentPaymentOrder.setOrderNo(orderNo);
-		studentPaymentOrder.setCreateTime(date);
-		studentPaymentOrder.setUpdateTime(date);
-		studentPaymentOrder.setVersion(0);
-		studentPaymentOrderService.insert(studentPaymentOrder);
-		Map result = studentPaymentOrderService.createOrder(studentPaymentOrder, null, "BUY_MEMBER");
-		return BaseController.succeed(result);
-	}
+    //写入支付数据
+    private Map<String, Object> getMap(BigDecimal amount, Boolean UseBalance, Integer userId, Integer organId, StudentPaymentOrder studentPaymentOrder) throws Exception {
+        Date date = new Date();
+        BigDecimal actualAmount = studentPaymentOrder.getActualAmount();
+        studentPaymentOrder.setUserId(userId);
+        studentPaymentOrder.setOrganId(organId);
+        studentPaymentOrder.setRoutingOrganId(organId);
+        studentPaymentOrder.setCreateTime(date);
+        studentPaymentOrder.setUpdateTime(date);
+        studentPaymentOrder.setBalancePaymentAmount(BigDecimal.ZERO);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setVersion(0);
+        studentPaymentOrder.setType(OrderTypeEnum.MEMBER);
+        studentPaymentOrder.setGroupType(GroupType.MEMBER);
+        studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setPaymentChannel("BALANCE");
+        // 判断金额是否正确
+        if (actualAmount.compareTo(amount) != 0) {
+            throw new BizException("非法请求");
+        }
+        //使用余额支付
+        if (UseBalance) {
+            useBalanceAmount(studentPaymentOrder, "购买会员");
+        }
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setCreateTime(date);
+        studentPaymentOrder.setUpdateTime(date);
+        studentPaymentOrder.setVersion(0);
+        studentPaymentOrderService.insert(studentPaymentOrder);
+        Map<String, Object> result = studentPaymentOrderService.createOrder(studentPaymentOrder, null, "BUY_MEMBER");
+        return result;
+    }
 
-	public StudentPaymentOrder useBalanceAmount(StudentPaymentOrder studentPaymentOrder,String memo){
-		Integer userId = studentPaymentOrder.getUserId();
-		SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
-		if (userCashAccount == null) {
-			throw new BizException("用户账户找不到");
-		}
-		BigDecimal actualAmount = studentPaymentOrder.getActualAmount();
-		studentPaymentOrder.setPaymentChannel("BALANCE");
-		if (userCashAccount.getBalance().subtract(actualAmount).doubleValue() >= 0) {
-			studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
-			studentPaymentOrder.setBalancePaymentAmount(actualAmount);
-			sysUserCashAccountService.updateBalance(userId, actualAmount.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, memo);
+    public void useBalanceAmount(StudentPaymentOrder studentPaymentOrder, String memo) {
+        Integer userId = studentPaymentOrder.getUserId();
+        SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
+        if (userCashAccount == null) {
+            throw new BizException("用户账户找不到");
+        }
+        BigDecimal actualAmount = studentPaymentOrder.getActualAmount();
+        studentPaymentOrder.setPaymentChannel("BALANCE");
+        if (userCashAccount.getBalance().subtract(actualAmount).doubleValue() >= 0) {
+            studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
+            studentPaymentOrder.setBalancePaymentAmount(actualAmount);
+            sysUserCashAccountService.updateBalance(userId, actualAmount.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, memo);
 
-		} else {
-			if (userCashAccount.getBalance().doubleValue() > 0) {
-				sysUserCashAccountService.updateBalance(userId, userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, memo);
-				studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
-				studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().subtract(userCashAccount.getBalance()));
-			}
-		}
-		return studentPaymentOrder;
-	}
+        } else {
+            if (userCashAccount.getBalance().doubleValue() > 0) {
+                sysUserCashAccountService.updateBalance(userId, userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, memo);
+                studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
+                studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().subtract(userCashAccount.getBalance()));
+            }
+        }
+    }
 
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-	public boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
-		//查询原定的是否已处理
-		StudentPaymentOrder orignStudentPaymentOrder = studentPaymentOrderService.lockOrder(studentPaymentOrder.getId());
-		if(orignStudentPaymentOrder == null){
-			return false;
-		}
-		if(orignStudentPaymentOrder.getStatus() != DealStatusEnum.ING){
-			return false;
-		}
-		Integer userId = studentPaymentOrder.getUserId();
-		Student student = studentService.get(userId);
-		if (student == null) {
-			throw new BizException("学员信息不存在");
-		}
-		
-		Date nowDate = new Date();
-		// 更新订单信息
-		studentPaymentOrder.setUpdateTime(nowDate);
-		studentPaymentOrderService.update(studentPaymentOrder);
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
+        //查询原定的是否已处理
+        StudentPaymentOrder orignStudentPaymentOrder = studentPaymentOrderService.lockOrder(studentPaymentOrder.getId());
+        if (orignStudentPaymentOrder == null) {
+            return false;
+        }
+        if (orignStudentPaymentOrder.getStatus() != DealStatusEnum.ING) {
+            return false;
+        }
+        Integer userId = studentPaymentOrder.getUserId();
+        Student student = studentService.get(userId);
+        if (student == null) {
+            throw new BizException("学员信息不存在");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserById(userId);
+        if (sysUser == null) {
+            throw new BizException("学员信息不存在");
+        }
 
-		if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
-			//退还优惠券和余额
-			studentPaymentOrderService.returnBalanceAndCoupon(studentPaymentOrder,"购买会员支付失败");
-			return true;
-		}
+        Date nowDate = new Date();
+        // 更新订单信息
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.update(studentPaymentOrder);
 
-		// 支付成功
-		if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
-			CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(Long.parseLong(studentPaymentOrder.getMusicGroupId()));
-			StudentCloudCoachPaymentDetails coachPaymentDetails = studentCloudCoachPaymentDetailsService.findByUserId(cloudCoachPaymentProgram.getId(),studentPaymentOrder.getUserId());
-			//保存团练宝数据
-			CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
-			cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
-			cloudTeacherOrder.setLevel(cloudCoachPaymentProgram.getMemberRankSettingId());
-			cloudTeacherOrder.setStatus(1);
-			cloudTeacherOrder.setType(cloudCoachPaymentProgram.getPeriod());
-			cloudTeacherOrder.setTime(cloudCoachPaymentProgram.getMemberNum().intValue());
-			cloudTeacherOrder.setStudentId(coachPaymentDetails.getUserId());
-			cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
-			cloudTeacherOrder.setAmount(studentPaymentOrder.getExpectAmount());
-			cloudTeacherOrderService.insert(cloudTeacherOrder);
+        if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
+            //退还优惠券和余额
+            studentPaymentOrderService.returnBalanceAndCoupon(studentPaymentOrder, "购买会员支付失败");
+            return true;
+        }
 
-			//修改缴费状态
-			coachPaymentDetails.setPaymentStatus(1);
-			coachPaymentDetails.setPaymentOrderId(studentPaymentOrder.getId());
-			studentCloudCoachPaymentDetailsService.update(coachPaymentDetails);
-			//修改实际缴费人数
-			cloudCoachPaymentProgram.setPaymentUserNum(cloudCoachPaymentProgram.getPaymentUserNum() + 1);
-			cloudCoachPaymentProgramService.update(cloudCoachPaymentProgram);
-			// 插入交易明细
-			sysUserCashAccountDetailService.saveSysUserCashAccountDetail(studentPaymentOrder,"购买会员");
+        // 支付成功
+        if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
+            //齐齐哈尔购买成功默认激活
+            // 活动时间:
+            // 1. 2022年2月8日上线预热
+            // 2. 2022年2月15日开始销售
+            // 3. 暂无结束时间,长期有效
+            //查询redis证明是活动购买
+            RBucket<Object> cache = redissonClient.getBucket(BUY_2_QQHE_LOCK + studentPaymentOrder.getOrderNo());
+            //查询活动时间
+            String activityDateStr = sysConfigDao.findConfigValue("qqhe_2022_buy_member_activity");
+            //获取活动时间
+            Date activityDate = DateUtil.stringToDate(activityDateStr, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+            //分部编号59 并且下单时间大于等于activityDateStr  todo 并且redis能查询到的就算齐齐哈尔活动购买的
+            if (sysUser.getOrganId() == 59 && studentPaymentOrder.getCreateTime().after(activityDate) && cache.isExists()) {
+                //修改 cloudTeacherOrderService
+                CloudTeacherOrder cloudTeacherOrder = cloudTeacherOrderService.queryByOrderId(studentPaymentOrder.getId());
+                cloudTeacherOrder.setStatus(2);
+                cloudTeacherOrder.setUpdateTime(nowDate);
+                cloudTeacherOrderService.update(cloudTeacherOrder);
+                //修改student 查询学生现在的会员过期没,如果过期了就按现在时间来,如果没过期就在结束时间上叠加
+                if (student.getMembershipStartTime().getTime() >= nowDate.getTime()) {
+                    student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
+                } else {
+                    student.setMembershipStartTime(cloudTeacherOrder.getStartTime());
+                    student.setMembershipEndTime(cloudTeacherOrder.getEndTime());
+                }
+                student.setMemberRankSettingId(1);
+                studentService.update(student);
+                //发送激活信息
+                Map<Integer, String> userPhones = new HashMap<>();
+                userPhones.put(sysUser.getId(), sysUser.getPhone());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.CLOUD_TEACHER_ORDER_SUCCESS, userPhones, null, 0, null, null);
+            } else {
+                CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(Long.parseLong(studentPaymentOrder.getMusicGroupId()));
+                StudentCloudCoachPaymentDetails coachPaymentDetails = studentCloudCoachPaymentDetailsService.findByUserId(cloudCoachPaymentProgram.getId(), studentPaymentOrder.getUserId());
+                //保存团练宝数据
+                CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
+                cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
+                cloudTeacherOrder.setLevel(cloudCoachPaymentProgram.getMemberRankSettingId());
+                cloudTeacherOrder.setStatus(1);
+                cloudTeacherOrder.setType(cloudCoachPaymentProgram.getPeriod());
+                cloudTeacherOrder.setTime(cloudCoachPaymentProgram.getMemberNum().intValue());
+                cloudTeacherOrder.setStudentId(coachPaymentDetails.getUserId());
+                cloudTeacherOrder.setOrganId(studentPaymentOrder.getOrganId());
+                cloudTeacherOrder.setAmount(studentPaymentOrder.getExpectAmount());
+                cloudTeacherOrderService.insert(cloudTeacherOrder);
 
-			try {
-				contractService.transferProduceContract(userId, null, CourseViewTypeEnum.MEMBER_FEE);
-			} catch (Exception e) {
-				logger.error("产品协议生成失败", e);
-			}
-		}
-		return true;
-	}
+                //修改缴费状态
+                coachPaymentDetails.setPaymentStatus(1);
+                coachPaymentDetails.setPaymentOrderId(studentPaymentOrder.getId());
+                studentCloudCoachPaymentDetailsService.update(coachPaymentDetails);
+                //修改实际缴费人数
+                cloudCoachPaymentProgram.setPaymentUserNum(cloudCoachPaymentProgram.getPaymentUserNum() + 1);
+                cloudCoachPaymentProgramService.update(cloudCoachPaymentProgram);
+            }
 
+            // 插入交易明细
+            sysUserCashAccountDetailService.saveSysUserCashAccountDetail(studentPaymentOrder, "购买会员");
+            try {
+                contractService.transferProduceContract(userId, null, CourseViewTypeEnum.MEMBER_FEE);
+            } catch (Exception e) {
+                logger.error("产品协议生成失败", e);
+            }
+        }
+        return true;
+    }
 
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
-	public HttpResponseResult ActiveBuy(Integer userId, Integer memberRankId, PeriodEnum month, BigDecimal amount, boolean isUseBalance, Integer buyNum, int giveNum, int activeRemark, String remark,boolean repay) throws Exception {
-		HttpResponseResult result = new HttpResponseResult();
-		//判断用户是否已存在订单
-		StudentPaymentOrder applyOrder = studentPaymentOrderService.findByUserAndActive(userId,202109,remark,"ING");
-		if (applyOrder != null) {
-			// 查询订单状态
-			PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
-			if(payStatus == PayStatus.SUCCESSED){
-				throw new BizException("订单已支付成功,请勿重复支付");
-			}/*else if(payStatus == PayStatus.PAYING){
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public HttpResponseResult ActiveBuy(Integer userId, Integer memberRankId, PeriodEnum month, BigDecimal amount, boolean isUseBalance, Integer buyNum, int giveNum, int activeRemark, String remark, boolean repay) throws Exception {
+        HttpResponseResult result = new HttpResponseResult();
+        //判断用户是否已存在订单
+        StudentPaymentOrder applyOrder = studentPaymentOrderService.findByUserAndActive(userId, 202109, remark, "ING");
+        if (applyOrder != null) {
+            // 查询订单状态
+            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
+            if (payStatus == PayStatus.SUCCESSED) {
+                throw new BizException("订单已支付成功,请勿重复支付");
+            }/*else if(payStatus == PayStatus.PAYING){
 				throw new BizException("订单还在交易中,请稍后重试");
 			}*/
-			if(repay){
-				//处理关闭订单
-				applyOrder.setStatus(DealStatusEnum.CLOSE);
-				applyOrder.setMemo("关闭团练宝活动订单");
-				if (applyOrder.getBalancePaymentAmount() != null && applyOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
-					sysUserCashAccountService.updateBalance(applyOrder.getUserId(), applyOrder.getBalancePaymentAmount(),
-							PlatformCashAccountDetailTypeEnum.REFUNDS, "购买团练宝活动支付失败");
-				}
-				studentPaymentOrderService.update(applyOrder);
-			}else {
-				result.setCode(HttpStatus.CONTINUE.value());
-				result.setMsg("您有待支付的订单");
-				return result;
-			}
+            if (repay) {
+                //处理关闭订单
+                applyOrder.setStatus(DealStatusEnum.CLOSE);
+                applyOrder.setMemo("关闭团练宝活动订单");
+                if (applyOrder.getBalancePaymentAmount() != null && applyOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                    sysUserCashAccountService.updateBalance(applyOrder.getUserId(), applyOrder.getBalancePaymentAmount(),
+                            PlatformCashAccountDetailTypeEnum.REFUNDS, "购买团练宝活动支付失败");
+                }
+                studentPaymentOrderService.update(applyOrder);
+            } else {
+                result.setCode(HttpStatus.CONTINUE.value());
+                result.setMsg("您有待支付的订单");
+                return result;
+            }
 
-		}
-		result.setCode(HttpStatus.OK.value());
-		MemberPayParamDto memberPayParamDto = new MemberPayParamDto();
+        }
+        result.setCode(HttpStatus.OK.value());
+        MemberPayParamDto memberPayParamDto = new MemberPayParamDto();
 //		memberPayParamDto.setMemberRankId(memberRankId);
 //		memberPayParamDto.setUserId(userId);
 //		memberPayParamDto.setPeriodEnum(month);
@@ -309,35 +446,35 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 //		memberPayParamDto.setGiveNum(giveNum);
 //		memberPayParamDto.setActiveRemark(activeRemark);
 //		memberPayParamDto.setRemark(remark);
-		memberPayParamDto.setAmount(amount);
-		return this.buy(memberPayParamDto);
-	}
+        memberPayParamDto.setAmount(amount);
+        return this.buy(memberPayParamDto);
+    }
 
-	//团练宝活动赠送优惠券
-	public void cloudTeacherActiveGiveCoupon(CloudTeacherOrder cloudTeacherOrder){
-		Integer activeRemark = cloudTeacherOrder.getActiveRemark();
-		String remark = cloudTeacherOrder.getRemark();
-		if(activeRemark == null || StringUtils.isEmpty(remark)){
-			return;
-		}
-		Integer studentId = cloudTeacherOrder.getStudentId();
-		SysUser sysUser = sysUserFeignService.queryUserById(studentId);
-		if(sysUser == null){
-			throw new BizException("用户信息获取失败");
-		}
-		Integer couponId = 1;
-		if(sysUser.getOrganId() != null && sysUser.getOrganId() == 4){
-			couponId = 2;
-		}
-		if(activeRemark.equals(202109)){
-			switch (remark){
-				case "2赠1":
-					sysCouponCodeService.exchangeCoupon(cloudTeacherOrder.getStudentId(),couponId,cloudTeacherOrder.getOrderId(),3,2,null);
-					break;
-				case "3赠2":
-					sysCouponCodeService.exchangeCoupon(cloudTeacherOrder.getStudentId(),couponId,cloudTeacherOrder.getOrderId(),6,2,null);
-					break;
-			}
-		}
-	}
+    //团练宝活动赠送优惠券
+    public void cloudTeacherActiveGiveCoupon(CloudTeacherOrder cloudTeacherOrder) {
+        Integer activeRemark = cloudTeacherOrder.getActiveRemark();
+        String remark = cloudTeacherOrder.getRemark();
+        if (activeRemark == null || StringUtils.isEmpty(remark)) {
+            return;
+        }
+        Integer studentId = cloudTeacherOrder.getStudentId();
+        SysUser sysUser = sysUserFeignService.queryUserById(studentId);
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Integer couponId = 1;
+        if (sysUser.getOrganId() != null && sysUser.getOrganId() == 4) {
+            couponId = 2;
+        }
+        if (activeRemark.equals(202109)) {
+            switch (remark) {
+                case "2赠1":
+                    sysCouponCodeService.exchangeCoupon(cloudTeacherOrder.getStudentId(), couponId, cloudTeacherOrder.getOrderId(), 3, 2, null);
+                    break;
+                case "3赠2":
+                    sysCouponCodeService.exchangeCoupon(cloudTeacherOrder.getStudentId(), couponId, cloudTeacherOrder.getOrderId(), 6, 2, null);
+                    break;
+            }
+        }
+    }
 }

+ 14 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -146,7 +146,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             insert(studentPaymentOrder);
         }
 
-        if (details != null && details.size() > 0) {
+        if (CollectionUtils.isNotEmpty(details)) {
             for (StudentPaymentOrderDetail spod : details) {
                 spod.setPaymentOrderId(studentPaymentOrder.getId());
                 spod.setCreateTime(date);
@@ -321,9 +321,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void quitCouponAndBalance(StudentPaymentOrder order){
+    public void quitCouponAndBalance(StudentPaymentOrder order) {
         //增加用户余额
-        if(order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0){
+        if (order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
             sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(),
                     PlatformCashAccountDetailTypeEnum.REFUNDS, order.getMemo() + ",订单号:" + order.getOrderNo());
         }
@@ -491,6 +491,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         } else if (order.getType().equals(OrderTypeEnum.DEGREE)) {
             childrenDayReserveService.orderCallback(order);
         } else if (order.getType().equals(OrderTypeEnum.MEMBER)) {
+            //购买团练宝
             memberRankSettingService.orderCallback(order);
         } else if (order.getType().equals(OrderTypeEnum.ACTIVITY)) {
             practiceGroupService.activityOrderCallback(order);
@@ -813,25 +814,25 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void cutSubjectPlan(StudentPaymentOrder order){
-        if(order.getType() == OrderTypeEnum.APPLY){
+    public void cutSubjectPlan(StudentPaymentOrder order) {
+        if (order.getType() == OrderTypeEnum.APPLY) {
             //如果是报名订单,订单关闭时需要更改已缴费学员数
             String musicGroupId = order.getMusicGroupId();
             Integer userId = order.getUserId();
             StudentRegistration studentRegistration = studentRegistrationService.getStudentRegister(musicGroupId, userId);
             //获取学员在乐团的状态,如果是在读,那么不处理人数
-            if(studentRegistration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.APPLY){
-                List<StudentPaymentOrder> oldStudentPaymentOrderList = this.queryByCondition(GroupType.MUSIC,musicGroupId, userId, DealStatusEnum.SUCCESS, OrderTypeEnum.APPLY);
+            if (studentRegistration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.APPLY) {
+                List<StudentPaymentOrder> oldStudentPaymentOrderList = this.queryByCondition(GroupType.MUSIC, musicGroupId, userId, DealStatusEnum.SUCCESS, OrderTypeEnum.APPLY);
                 //判断是否有成功的订单,如果有,表示已经处理过人数
-                if(oldStudentPaymentOrderList == null || oldStudentPaymentOrderList.size() == 0){
+                if (oldStudentPaymentOrderList == null || oldStudentPaymentOrderList.size() == 0) {
                     List<StudentPaymentOrderDetail> orderDetail = studentPaymentOrderDetailService.getOrderDetail(order.getId());
-                    if(orderDetail != null && orderDetail.size() > 0){
+                    if (orderDetail != null && orderDetail.size() > 0) {
                         long count = orderDetail.stream().filter(e -> e.getType() == OrderDetailTypeEnum.MUSICAL || e.getType() == OrderDetailTypeEnum.CLOUD_TEACHER).count();
                         MusicGroup musicGroup = musicGroupService.get(musicGroupId);
                         //如果购买了乐器或者云教练,或者不是会员团,那么关闭订单时人数减一
-                        if(count > 0 || musicGroup.getCourseViewType() != CourseViewTypeEnum.MEMBER_FEE){
+                        if (count > 0 || musicGroup.getCourseViewType() != CourseViewTypeEnum.MEMBER_FEE) {
                             MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(musicGroupId, studentRegistration.getActualSubjectId());
-                            musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() == null?0:musicOneSubjectClassPlan.getPaidStudentNum() - 1);
+                            musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() == null ? 0 : musicOneSubjectClassPlan.getPaidStudentNum() - 1);
                             musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
                         }
                     }
@@ -886,7 +887,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     public List<StudentPaymentOrder> queryByDealStatus(String musicGroupId, OrderTypeEnum orderType, DealStatusEnum status) {
-        return studentPaymentOrderDao.queryByDealStatus(musicGroupId,orderType,status);
+        return studentPaymentOrderDao.queryByDealStatus(musicGroupId, orderType, status);
     }
 
     @Override
@@ -896,7 +897,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void returnBalanceAndCoupon(StudentPaymentOrder studentPaymentOrder,String memo){
+    public void returnBalanceAndCoupon(StudentPaymentOrder studentPaymentOrder, String memo) {
         if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
             sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(),
                     PlatformCashAccountDetailTypeEnum.REFUNDS, memo);

+ 5 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -215,12 +215,13 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         if (record.getId() == null) {
             throw new BizException("订单未找到");
         }
-        record.setPayDate(new Date());
-        record.setPayTime(new Date());
+        Date now = new Date();
+        record.setPayDate(now);
+        record.setPayTime(now);
         updateById(record);
         List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderDao.findByPlatformOrderId(record.getId());
-        Date startTime = DateUtil.trunc(new Date());
-        Date endTime = new Date();
+        Date startTime = DateUtil.trunc(now);
+        Date endTime = now;
         for (CloudTeacherOrder cto : cloudTeacherOrders) {
             endTime = cloudTeacherOrderService.calcCloudTeacherOrderTime(cto, startTime, endTime);
             cto.setStartTime(startTime);

+ 32 - 0
mec-student/src/main/java/com/ym/mec/student/controller/MemberRankController.java

@@ -65,6 +65,38 @@ public class MemberRankController extends BaseController {
 		return memberRankSettingService.buy(memberPayParamDto);
 	}
 
+    /**
+     * 齐齐哈尔购买团练宝-默认激活
+     * <p> 购买规则
+     * <p>活动分部:
+     * 齐齐哈尔二组,编号59
+     * <p>
+     * 活动内容:
+     * <p>1. 团练宝按月购买,学员可自行选择购买多少个月,单次购买达到一定数量进行赠送,无需激活,支付后立即生效
+     * <p>2. 单月价格:150元/月
+     * <p>3. 单次购买2个月赠送1个月
+     * <p>4. 单次购买4个月赠送3个月
+     * <p>5. 单次购买6个月赠送6个月
+     * <p>6. 每笔订单仅按能够满足赠送条件的最高档赠送,不可叠加,
+     * <p>例:学员单次购买12个月,则赠送6个月,共18个月;学员单次购买5个月,则赠送3个月,共8个月
+     * <p>7. 每笔订单独立计算,多比订单不可叠加,
+     * <p>例:学员三笔订单,每笔1个月,不赠送
+     * <p>8. 每笔订单达到赠送条件都可赠送,
+     * <p>例:学员两笔订单都买的6个月,则两笔订单都送6个月
+     * <p>活动时间:
+     * <p>1. 2022年2月8日上线预热
+     * <p>2. 2022年2月15日开始销售
+     * <p>3. 暂无结束时间,长期有效
+     *
+     * @return
+     */
+    @ApiOperation(value = "购买会员")
+    @PostMapping("/buy2Qqhe")
+    public Object buy2Qqhe(@RequestBody MemberPayParamDto memberPayParamDto) throws Exception {
+        return memberRankSettingService.buy2Qqhe(memberPayParamDto);
+    }
+
+
 	@ApiOperation(value = "2021-09活动购买会员")
 	@PostMapping("/activeBuy")
 	public HttpResponseResult ActiveBuy(@RequestBody MemberPayParamDto memberPayParamDto) throws Exception {