package com.tcm.training.admin.points.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tcm.training.admin.points.dto.PointsConfigSaveRequest; import com.tcm.training.admin.points.entity.PointsConfig; import com.tcm.training.admin.points.mapper.PointsConfigMapper; import com.tcm.training.admin.points.vo.PointsConfigVO; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; @Service public class PointsSettingsAppService { private final PointsConfigMapper pointsConfigMapper; public PointsSettingsAppService(PointsConfigMapper pointsConfigMapper) { this.pointsConfigMapper = pointsConfigMapper; } public PointsConfigVO current() { PointsConfig config = pointsConfigMapper.selectOne(new LambdaQueryWrapper() .eq(PointsConfig::getDeleted, 0) .orderByDesc(PointsConfig::getId) .last("limit 1")); return toVO(config); } @Transactional public PointsConfigVO saveCurrent(PointsConfigSaveRequest request) { validateRequest(request); PointsConfig currentPending = pointsConfigMapper.selectOne(new LambdaQueryWrapper() .eq(PointsConfig::getDeleted, 0) .eq(PointsConfig::getSettlementStatus, 0) .orderByDesc(PointsConfig::getId) .last("limit 1")); if (currentPending == null) { currentPending = new PointsConfig(); currentPending.setSettlementStatus(0); currentPending.setSettledAt(null); fillConfig(currentPending, request); pointsConfigMapper.insert(currentPending); } else { fillConfig(currentPending, request); currentPending.setSettlementStatus(0); currentPending.setSettledAt(null); pointsConfigMapper.updateById(currentPending); } return toVO(currentPending); } private void validateRequest(PointsConfigSaveRequest request) { if (!request.getActivityEndAt().isAfter(request.getActivityStartAt())) { throw new IllegalArgumentException("活动结束时间必须晚于活动开始时间"); } } private void fillConfig(PointsConfig config, PointsConfigSaveRequest request) { config.setActivityStartAt(request.getActivityStartAt()); config.setActivityEndAt(request.getActivityEndAt()); config.setGiftCover(request.getGiftCover().trim()); config.setGiftName(request.getGiftName().trim()); config.setRequiredPoints(request.getRequiredPoints()); } private PointsConfigVO toVO(PointsConfig config) { if (config == null) { return null; } PointsConfigVO vo = new PointsConfigVO(); vo.setId(config.getId()); vo.setActivityStartAt(config.getActivityStartAt()); vo.setActivityEndAt(config.getActivityEndAt()); vo.setGiftCover(config.getGiftCover()); vo.setGiftName(config.getGiftName()); vo.setRequiredPoints(config.getRequiredPoints()); vo.setSettlementStatus(config.getSettlementStatus()); vo.setSettledAt(config.getSettledAt()); return vo; } }