Browse Source

Merge remote-tracking branch 'origin/cloud_teacher_active_2021_09' into cloud_teacher_active_2021_09

Joburgess 3 năm trước cách đây
mục cha
commit
8142b8be95

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -436,4 +436,15 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @return
      */
     List<Mapper> getMoneyInMusicApply(@Param("musicGroupIds") List<String> musicGroupIds);
+
+    /**
+     * 获取学员购买的云教练活动订单
+     * @param userId
+     * @param activeRemark
+     * @param remark
+     * @return
+     */
+    StudentPaymentOrder findByUserAndActive(@Param("userId") Integer userId,
+                                            @Param("activeRemark") Integer activeRemark,
+                                            @Param("remark") String remark);
 }

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankSettingService.java

@@ -26,9 +26,20 @@ public interface MemberRankSettingService extends BaseService<Integer, MemberRan
 	 * @param periodEnum 会员周期
 	 * @param amount 金额
 	 * @param isUseBalance 是否使用余额
+	 * @param buyNum 购买数量
+	 * @param giveNum 赠送数量
+	 * @param activeRemark 活动标记
+	 * @param remark 备注
 	 * @return
 	 */
-	Map buy(Integer userId, Integer memberRankId, PeriodEnum periodEnum, BigDecimal amount, boolean isUseBalance) throws Exception;
+	Map buy(Integer userId,
+			Integer memberRankId,
+			PeriodEnum periodEnum,
+			BigDecimal amount,
+			boolean isUseBalance,
+			Integer buyNum,
+			Integer giveNum,
+			Integer activeRemark,String remark) throws Exception;
 	
 	/**
 	 * 订单回调

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -22,8 +22,10 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 public interface StudentPaymentOrderService extends BaseService<Long, StudentPaymentOrder> {
-	
-	Map createOrder(StudentPaymentOrder studentPaymentOrder, List<StudentPaymentOrderDetail> details, String payReceiver) throws Exception;
+
+    StudentPaymentOrder findByUserAndActive(Integer userId, Integer activeRemark, String remark);
+
+    Map createOrder(StudentPaymentOrder studentPaymentOrder, List<StudentPaymentOrderDetail> details, String payReceiver) throws Exception;
 
     /**
      * 查询商品列表

+ 91 - 41
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

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

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -113,6 +113,11 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
+    public StudentPaymentOrder findByUserAndActive(Integer userId, Integer activeRemark, String remark) {
+        return studentPaymentOrderDao.findByUserAndActive(userId,activeRemark,remark);
+    }
+
+    @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 	public Map createOrder(StudentPaymentOrder studentPaymentOrder, List<StudentPaymentOrderDetail> details, String payReceiver)
 			throws Exception {

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

@@ -250,6 +250,7 @@
     </select>
     <sql id="queryCloudTeacherActiveDetailSql">
         <where>
+            cto.status_ != 0 AND cto.active_remark_ = '202109'
             <if test="organIds != null and organIds != ''">
                 AND FIND_IN_SET(su.organ_id_,#{organIds})
             </if>

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

@@ -1831,7 +1831,7 @@
 		SELECT o.name_ organ_name_,o.id_ organ_id_,CASE WHEN SUM(cto.amount_) IS NULL THEN 0 ELSE SUM(cto.amount_) END buy_amount_,
 		COUNT(DISTINCT cto.student_id_) buy_num_,COUNT(s.user_id_) total_num_ FROM student s
 		LEFT JOIN sys_user su ON su.id_ = s.user_id_
-		LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_
+		LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_ AND cto.status_ != 0 AND cto.active_remark_ = '202109'
 		LEFT JOIN organization o ON o.id_ = su.organ_id_
 		WHERE s.count_flag_ = 1
 		<if test="organIdList != null and organIdList.size > 0">

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

@@ -1290,7 +1290,7 @@
         FROM student_registration sr
         LEFT JOIN music_group mg ON sr.music_group_id_=mg.id_
         WHERE mg.status_='PROGRESS'
-        AND sr.music_group_status_='NORMAL')
+        AND sr.music_group_status_='NORMAL' AND mg.cloud_teacher_type_ != 2)
         UNION ALL
         (SELECT
         cssp.user_id_

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

@@ -996,4 +996,10 @@
         AND spo.type_ = 'APPLY' and spo.status_ = 'SUCCESS'
 		GROUP BY spo.music_group_id_
     </select>
+    <select id="findByUserAndActive" resultMap="StudentPaymentOrder">
+        SELECT spo.* FROM cloud_teacher_order cto
+        LEFT JOIN student_payment_order spo ON spo.id_ = cto.order_id_
+        WHERE spo.status_ != 'FAILED' AND cto.active_remark_ = #{activeRemark}
+        AND cto.remark_ = #{remark} AND cto.student_id_ = #{userId} LIMIT 1
+    </select>
 </mapper>

+ 38 - 1
mec-student/src/main/java/com/ym/mec/student/controller/MemberRankController.java

@@ -1,9 +1,13 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +48,9 @@ public class MemberRankController extends BaseController {
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 
+	@Autowired
+	private SysConfigDao sysConfigDao;
+
 	@ApiOperation(value = "获取所有的收费标准")
 	@GetMapping("/queryList")
 	public Object getMemberDefaultFee() {
@@ -68,8 +75,38 @@ public class MemberRankController extends BaseController {
 		if (sysUser == null) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
+		return succeed(memberRankSettingService.buy(sysUser.getId(), memberRankId, periodEnum, amount, isUseBalance,1,0,null,null));
+	}
 
-		return succeed(memberRankSettingService.buy(sysUser.getId(), memberRankId, periodEnum, amount, isUseBalance));
+	@ApiOperation(value = "2021-09活动购买会员")
+	@PostMapping("/activeBuy")
+	public Object ActiveBuy(Integer memberRankId, Integer buyNum, BigDecimal amount, boolean isUseBalance) throws Exception {
+		Date nowTime = new Date();
+		String startTimeStr = sysConfigDao.findConfigValue("cloud_teacher_active_start_time");
+		Date startTime = DateUtil.stringToDate(startTimeStr);
+		if (startTime.compareTo(nowTime) > 0) {
+			throw new BizException("活动还未开始,谢谢关注");
+		}
+		String endTimeStr = sysConfigDao.findConfigValue("cloud_teacher_active_end_time");
+		Date endTime = DateUtil.stringToDate(endTimeStr);
+		if (endTime.compareTo(nowTime) <= 0) {
+			throw new BizException("活动已结束,谢谢关注");
+		}
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		//买2赠1、买3赠2
+		int giveNum = buyNum == 2?1:buyNum == 3?2:0;
+		String remark = buyNum == 2?"2赠1":buyNum == 3?"3赠2":buyNum == 1?"单月":"其他";
+		return succeed(memberRankSettingService.buy(sysUser.getId(),
+				memberRankId,
+				PeriodEnum.MONTH,
+				amount,
+				isUseBalance,
+				buyNum,
+				giveNum,
+				202109,remark));
 	}
 	
     @ApiOperation(value = "查询订单列表")

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

@@ -501,7 +501,7 @@ public class TaskController extends BaseController {
 		sysMusicCompareRecordService.curWeekStudentTrainRemind();
 	}
 
-	@ApiOperation("标记进行中乐团在读学员+VIP、网管有课学员总数(除弦乐声部、去重")
+	@ApiOperation("标记进行中乐团在读学员+VIP、网管有课学员总数(除弦乐声部、去重,去除在云教练的乐团的学员")
 	@GetMapping(value = "/remarkCountFlag")
 	public void remarkCountFlag(){
 		studentService.remarkCountFlag();