| | |
| | | package com.dsh.activity.service.impl; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.dsh.activity.entity.BenefitsVideoClassification; |
| | | import com.dsh.activity.entity.THuiminCard; |
| | | import com.dsh.activity.mapper.BenefitsVideoClassificationMapper; |
| | | import com.dsh.activity.entity.TPayHuimin; |
| | | import com.dsh.activity.entity.TStudent; |
| | | import com.dsh.activity.enums.HuiminCardPaymentStatusEnum; |
| | | import com.dsh.activity.enums.HuiminCardPaymentTypeEnum; |
| | | import com.dsh.activity.enums.HuiminCardRefundStatusEnum; |
| | | import com.dsh.activity.enums.HuiminCardTypeEnum; |
| | | import com.dsh.activity.feignclient.account.StudentClient; |
| | | import com.dsh.activity.mapper.HuiminCardMapper; |
| | | import com.dsh.activity.model.BenefitsVedioChangeStateVO; |
| | | import com.dsh.activity.model.QueryBenefitsVedioVO; |
| | | import com.dsh.activity.model.TQueryBenefitsVO; |
| | | import com.dsh.activity.model.response.HuiminCardVO; |
| | | import com.dsh.activity.model.response.MyHuiminCardVO; |
| | | import com.dsh.activity.service.HuiminCardService; |
| | | import com.dsh.activity.service.IBenefitsVideoClassificationService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import com.dsh.activity.service.PayHuiminService; |
| | | import com.dsh.activity.util.UUIDUtil; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Service |
| | | public class HuiminCardServiceImpl extends ServiceImpl<HuiminCardMapper, THuiminCard> implements HuiminCardService { |
| | | |
| | | private static final int ANNUAL_CARD_VALID_DAYS = 365; |
| | | private static final int YEAR_END_MONTH = Calendar.DECEMBER; |
| | | private static final int YEAR_END_DAY = 31; |
| | | private static final int DAY_END_HOUR = 23; |
| | | private static final int DAY_END_MINUTE = 59; |
| | | private static final int DAY_END_SECOND = 59; |
| | | |
| | | @Resource |
| | | private PayHuiminService payHuiminService; |
| | | @Resource |
| | | private StudentClient studentClient; |
| | | |
| | | @Override |
| | | public List<THuiminCard> getHuiminAgreementAndList(Integer pageNo, Integer pageSize, Integer storeId) { |
| | |
| | | public List<MyHuiminCardVO> getMyHuiminCardList(Integer pageNo, Integer pageSize,Integer appUserId) { |
| | | return this.baseMapper.getMyHuiminCardList(pageNo,pageSize,appUserId); |
| | | } |
| | | |
| | | /** |
| | | * 为指定绑定人员录入赠送的玩湃惠民卡订单。 |
| | | * 业务流程:参数校验 → 校验卡及人员 → 计算有效期 → 保存赠送订单。 |
| | | * |
| | | * @param studentId 绑定人员ID,不可为空 |
| | | * @param cardId 玩湃惠民卡ID,不可为空 |
| | | * @throws IllegalArgumentException 惠民卡或绑定人员不存在时抛出 |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void recordGiftHuiminCard(Integer studentId, Integer cardId) { |
| | | // STEP 1: 校验录入所需的基础参数。 |
| | | if (studentId == null || cardId == null) { |
| | | throw new IllegalArgumentException("绑定人员和惠民卡不能为空"); |
| | | } |
| | | |
| | | // STEP 2: 查询并校验惠民卡和绑定人员,确保订单关联数据有效。 |
| | | THuiminCard huiminCard = this.getById(cardId); |
| | | if (huiminCard == null) { |
| | | throw new IllegalArgumentException("玩湃惠民卡不存在"); |
| | | } |
| | | List<TStudent> students = studentClient.getStudentByIds(String.valueOf(studentId)); |
| | | if (CollUtil.isEmpty(students) || students.get(0).getAppUserId() == null) { |
| | | throw new IllegalArgumentException("绑定人员不存在或未关联用户"); |
| | | } |
| | | |
| | | // STEP 3: 按卡类型计算赠送卡的有效期。 |
| | | Date currentTime = new Date(); |
| | | TPayHuimin giftOrder = new TPayHuimin(); |
| | | giftOrder.setSalesMoney(huiminCard.getSalesMoney()); |
| | | giftOrder.setAppUserId(students.get(0).getAppUserId()); |
| | | giftOrder.setStudentId(String.valueOf(studentId)); |
| | | giftOrder.setEndTime(calculateEndTime(huiminCard.getHuiMinType(), currentTime)); |
| | | |
| | | // STEP 4: 以赠送类型保存已支付订单,保留卡面金额但不参与售卖金额统计。 |
| | | giftOrder.setInsertTime(currentTime); |
| | | giftOrder.setPaymentTime(currentTime); |
| | | giftOrder.setPaymentType(HuiminCardPaymentTypeEnum.GIFT.getCode()); |
| | | giftOrder.setStatus(HuiminCardPaymentStatusEnum.PAID.getCode()); |
| | | giftOrder.setRefundStatus(HuiminCardRefundStatusEnum.PENDING_REFUND.getCode()); |
| | | giftOrder.setCardId(huiminCard.getId()); |
| | | giftOrder.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5)); |
| | | payHuiminService.save(giftOrder); |
| | | } |
| | | |
| | | /** |
| | | * 根据惠民卡类型计算有效期。 |
| | | * |
| | | * @param cardType 惠民卡类型 |
| | | * @param currentTime 当前时间 |
| | | * @return 有效期结束时间;未知类型时返回 null |
| | | */ |
| | | private Date calculateEndTime(Integer cardType, Date currentTime) { |
| | | if (HuiminCardTypeEnum.ANNUAL_CARD.matches(cardType)) { |
| | | LocalDateTime expirationTime = LocalDateTime.now().plusDays(ANNUAL_CARD_VALID_DAYS); |
| | | return Date.from(expirationTime.atZone(ZoneId.systemDefault()).toInstant()); |
| | | } |
| | | if (HuiminCardTypeEnum.CURRENT_YEAR_CARD.matches(cardType)) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(currentTime); |
| | | calendar.set(Calendar.MONTH, YEAR_END_MONTH); |
| | | calendar.set(Calendar.DAY_OF_MONTH, YEAR_END_DAY); |
| | | calendar.set(Calendar.HOUR_OF_DAY, DAY_END_HOUR); |
| | | calendar.set(Calendar.MINUTE, DAY_END_MINUTE); |
| | | calendar.set(Calendar.SECOND, DAY_END_SECOND); |
| | | calendar.set(Calendar.MILLISECOND, 0); |
| | | return calendar.getTime(); |
| | | } |
| | | return null; |
| | | } |
| | | } |