|
@@ -6,10 +6,13 @@ import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+import com.ym.mec.biz.service.*;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Isolation;
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
@@ -30,14 +33,6 @@ import com.ym.mec.biz.dal.enums.GroupType;
|
|
|
import com.ym.mec.biz.dal.enums.OrderTypeEnum;
|
|
|
import com.ym.mec.biz.dal.enums.PeriodEnum;
|
|
|
import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
|
|
|
-import com.ym.mec.biz.service.CloudTeacherOrderService;
|
|
|
-import com.ym.mec.biz.service.ContractService;
|
|
|
-import com.ym.mec.biz.service.MemberFeeSettingService;
|
|
|
-import com.ym.mec.biz.service.MemberRankSettingService;
|
|
|
-import com.ym.mec.biz.service.StudentPaymentOrderService;
|
|
|
-import com.ym.mec.biz.service.StudentService;
|
|
|
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
|
|
|
-import com.ym.mec.biz.service.SysUserCashAccountService;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
import com.ym.mec.common.exception.BizException;
|
|
|
import com.ym.mec.common.service.IdGeneratorService;
|
|
@@ -79,6 +74,9 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
@Autowired
|
|
|
private IdGeneratorService idGeneratorService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SysCouponCodeService sysCouponCodeService;
|
|
|
+
|
|
|
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
|
|
|
@Override
|
|
@@ -124,14 +122,43 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
return memberRankSettingDao.queryListByIsDefault(isDefault);
|
|
|
}
|
|
|
|
|
|
+ //是否有购买资格
|
|
|
+ public void buyCloudTeacherActive(Integer userId,Integer activeRemark,String remark){
|
|
|
+ if(activeRemark == null || StringUtils.isEmpty(remark)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(activeRemark.equals(202109)){
|
|
|
+ StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findByUserAndActive(userId,activeRemark,remark);
|
|
|
+ if(studentPaymentOrder != null){
|
|
|
+ DealStatusEnum status = studentPaymentOrder.getStatus();
|
|
|
+ if(status == DealStatusEnum.SUCCESS){
|
|
|
+ throw new BizException("您已参与云教练 {} 活动,快去练习吧!",remark);
|
|
|
+ }
|
|
|
+ if(status == DealStatusEnum.ING){
|
|
|
+ throw new BizException("您有待处理的订单,请稍后重试");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
|
|
- public Map buy(Integer userId, Integer memberRankId, PeriodEnum periodEnum, BigDecimal amount, boolean isUseBalance) throws Exception {
|
|
|
- Student student = studentService.get(userId);
|
|
|
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
|
|
|
+ public Map buy(Integer userId,
|
|
|
+ Integer memberRankId,
|
|
|
+ PeriodEnum periodEnum,
|
|
|
+ BigDecimal amount,
|
|
|
+ boolean isUseBalance,
|
|
|
+ Integer buyNum,
|
|
|
+ Integer giveNum,
|
|
|
+ Integer activeRemark,String remark) throws Exception {
|
|
|
+ logger.info("云教练活动购买:userId:{} memberRankId:{} periodEnum:{} amount:{} isUseBalance:{} buyNum:{} giveNum:{} activeRemark:{} remark:{}",
|
|
|
+ userId,memberRankId,periodEnum,amount,isUseBalance,buyNum,giveNum,activeRemark,remark);
|
|
|
+ Student student = studentService.getLocked(userId);
|
|
|
if (student == null) {
|
|
|
throw new BizException("非法访问");
|
|
|
}
|
|
|
-
|
|
|
+ //是否可以购买
|
|
|
+ buyCloudTeacherActive(userId,activeRemark,remark);
|
|
|
SysUser user = sysUserFeignService.queryUserById(userId);
|
|
|
|
|
|
Integer organId = user.getOrganId();
|
|
@@ -155,34 +182,35 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
BigDecimal actualAmount = BigDecimal.ZERO;
|
|
|
|
|
|
switch (periodEnum) {
|
|
|
- case DAY:
|
|
|
- actualAmount = memberFeeSetting.getCurrentDayFee();
|
|
|
- cloudTeacherOrder.setType(1);
|
|
|
- cloudTeacherOrder.setTime(1);
|
|
|
- break;
|
|
|
- case MONTH:
|
|
|
- actualAmount = memberFeeSetting.getCurrentMonthFee();
|
|
|
- cloudTeacherOrder.setType(2);
|
|
|
- cloudTeacherOrder.setTime(1);
|
|
|
- break;
|
|
|
- case QUARTERLY:
|
|
|
- actualAmount = memberFeeSetting.getCurrentQuarterlyFee();
|
|
|
- cloudTeacherOrder.setType(2);
|
|
|
- cloudTeacherOrder.setTime(3);
|
|
|
- break;
|
|
|
- case YEAR_HALF:
|
|
|
- actualAmount = memberFeeSetting.getCurrentHalfYearFee();
|
|
|
- cloudTeacherOrder.setType(2);
|
|
|
- cloudTeacherOrder.setTime(6);
|
|
|
- break;
|
|
|
- case YEAR:
|
|
|
- actualAmount = memberFeeSetting.getCurrentYearFee();
|
|
|
- cloudTeacherOrder.setType(3);
|
|
|
- cloudTeacherOrder.setTime(1);
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- break;
|
|
|
+ case DAY:
|
|
|
+ actualAmount = memberFeeSetting.getCurrentDayFee();
|
|
|
+ cloudTeacherOrder.setType(1);
|
|
|
+ cloudTeacherOrder.setTime(1);
|
|
|
+ break;
|
|
|
+ case MONTH:
|
|
|
+ actualAmount = memberFeeSetting.getCurrentMonthFee().multiply(new BigDecimal(buyNum));
|
|
|
+ cloudTeacherOrder.setType(2);
|
|
|
+ //购买月份加上赠送月份,目前只有按月购买的活动,其他的暂不处理
|
|
|
+ cloudTeacherOrder.setTime(buyNum + giveNum);
|
|
|
+ break;
|
|
|
+ case QUARTERLY:
|
|
|
+ actualAmount = memberFeeSetting.getCurrentQuarterlyFee();
|
|
|
+ cloudTeacherOrder.setType(2);
|
|
|
+ cloudTeacherOrder.setTime(3);
|
|
|
+ break;
|
|
|
+ case YEAR_HALF:
|
|
|
+ actualAmount = memberFeeSetting.getCurrentHalfYearFee();
|
|
|
+ cloudTeacherOrder.setType(2);
|
|
|
+ cloudTeacherOrder.setTime(6);
|
|
|
+ break;
|
|
|
+ case YEAR:
|
|
|
+ actualAmount = memberFeeSetting.getCurrentYearFee();
|
|
|
+ cloudTeacherOrder.setType(3);
|
|
|
+ cloudTeacherOrder.setTime(1);
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
// 判断金额是否正确
|
|
@@ -246,6 +274,8 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
|
|
|
cloudTeacherOrder.setCreateTime(date);
|
|
|
cloudTeacherOrder.setUpdateTime(date);
|
|
|
+ cloudTeacherOrder.setActiveRemark(activeRemark);
|
|
|
+ cloudTeacherOrder.setRemark(remark);
|
|
|
cloudTeacherOrderService.insert(cloudTeacherOrder);
|
|
|
|
|
|
Map result = studentPaymentOrderService.createOrder(studentPaymentOrder, null, "BUY_MEMBER");
|
|
@@ -338,7 +368,8 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
cloudTeacherOrderService.update(cloudTeacherOrder);
|
|
|
// 添加会员有效时长
|
|
|
studentService.updateMemberRank(cloudTeacherOrder, periodEnum);
|
|
|
-
|
|
|
+ //云教练活动赠送优惠券
|
|
|
+ cloudTeacherActiveGiveCoupon(cloudTeacherOrder);
|
|
|
// 插入交易明细
|
|
|
BigDecimal amount = studentPaymentOrder.getActualAmount();
|
|
|
if (amount.compareTo(BigDecimal.ZERO) > 0) {
|
|
@@ -382,4 +413,23 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ //云教练活动赠送优惠券
|
|
|
+ public void cloudTeacherActiveGiveCoupon(CloudTeacherOrder cloudTeacherOrder){
|
|
|
+ Integer activeRemark = cloudTeacherOrder.getActiveRemark();
|
|
|
+ String remark = cloudTeacherOrder.getRemark();
|
|
|
+ if(activeRemark == null || StringUtils.isEmpty(remark)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(activeRemark.equals(202109)){
|
|
|
+ switch (remark){
|
|
|
+ case "2增1":
|
|
|
+ sysCouponCodeService.exchangeCoupon(cloudTeacherOrder.getStudentId(),1,cloudTeacherOrder.getOrderId(),3);
|
|
|
+ break;
|
|
|
+ case "3增2":
|
|
|
+ sysCouponCodeService.exchangeCoupon(cloudTeacherOrder.getStudentId(),1,cloudTeacherOrder.getOrderId(),6);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|