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