| 
					
				 | 
			
			
				@@ -0,0 +1,113 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.yonge.cooleshow.biz.dal.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.microsvc.toolkit.common.webportal.exception.BizException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.entity.DiscountCardRecord; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.entity.Student; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.enums.EVipRecordStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.enums.EVipType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.mapper.DiscountCardRecordMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.service.DiscountCardRecordService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.service.StudentService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.service.VipCardRecordService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.vo.MemberPriceSettingsVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.toolset.utils.date.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.time.LocalDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.time.LocalDateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.time.LocalTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.time.ZoneId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 购买会员卡记录表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 2024-11-15 10:57:20 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class DiscountCardRecordServiceImpl extends ServiceImpl<DiscountCardRecordMapper, DiscountCardRecord> implements DiscountCardRecordService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MemberPriceSettingsService memberPriceSettingsService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private StudentService studentService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void orderSuccess(UserOrderDetailVo orderDetailVo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (null == orderDetailVo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MemberPriceSettingsVo detail = memberPriceSettingsService.detail(orderDetailVo.getBizId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!detail.getVipType().equals(EVipType.DISCOUNT)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DiscountCardRecord discountCardRecord = new DiscountCardRecord(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setUserId(orderDetailVo.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setVipCardId(orderDetailVo.getBizId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setOrderNo(orderDetailVo.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setSourceType(SourceTypeEnum.ORDER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setClientType(orderDetailVo.getOrderClient()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setSubOrderNo(orderDetailVo.getSubOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setCreateBy(orderDetailVo.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setType(detail.getPeriod()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setTimes(orderDetailVo.getGoodNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setVipType(detail.getVipType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setStatus(EVipRecordStatus.ADD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setDisplayFlag(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setEfficientFlag(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setSendMsg(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 设置时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Student student = studentService.getById(orderDetailVo.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LocalDate startTime = LocalDate.now(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (student.getDiscountEndTime() != null && student.getDiscountEndTime().after(new Date())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            startTime = student.getDiscountEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LocalDate endTime = LocalDate.now(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        switch (discountCardRecord.getType()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case DAY: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                endTime = startTime.plusDays(discountCardRecord.getTimes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case MONTH: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                endTime = startTime.plusMonths(discountCardRecord.getTimes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case QUARTERLY: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                endTime = startTime.plusMonths(discountCardRecord.getTimes() * 3L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case YEAR_HALF: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                endTime = startTime.plusMonths(discountCardRecord.getTimes() * 6L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case YEAR: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                endTime = startTime.plusYears(discountCardRecord.getTimes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("时间类型错误{}", discountCardRecord.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setStartTime(DateUtil.localDateTimeToDate(startTime.atTime(LocalTime.MIN))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discountCardRecord.setEndTime(DateUtil.localDateTimeToDate(endTime.atTime(LocalTime.MAX))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.save(discountCardRecord); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 更新学生时长 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        studentService.lambdaUpdate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .set(Student::getDiscountEndTime, discountCardRecord.getEndTime()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .set(student.getDiscountStartTime() == null,Student::getDiscountStartTime, discountCardRecord.getEndTime()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .eq(Student::getUserId, orderDetailVo.getUserId()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .update(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |