123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package com.qmrb.system.service.impl;
- import java.math.BigDecimal;
- import java.time.Instant;
- import java.time.LocalDateTime;
- import java.time.ZoneId;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- import java.util.Set;
- import java.util.stream.Collectors;
- import com.qmrb.system.common.util.AesUtils;
- import com.qmrb.system.framework.security.CaConstants;
- import com.qmrb.system.framework.security.util.SecurityUtils;
- import com.qmrb.system.pojo.entity.BarnRecord;
- import com.qmrb.system.pojo.entity.Contract;
- import com.qmrb.system.pojo.entity.SysUser;
- import com.qmrb.system.service.IBarnRecordService;
- import com.qmrb.system.service.IContractService;
- import com.qmrb.system.service.SysUserService;
- import com.qmrb.system.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.qmrb.system.common.enums.StatusEnum;
- import com.qmrb.system.pojo.vo.Option;
- import com.qmrb.system.converter.CouponConverter;
- import com.qmrb.system.pojo.entity.Coupon;
- import com.qmrb.system.pojo.form.CouponForm;
- import com.qmrb.system.pojo.vo.CouponVO;
- import com.qmrb.system.pojo.query.CouponQuery;
- import com.qmrb.system.mapper.CouponMapper;
- import com.qmrb.system.service.ICouponService;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.stereotype.Service;
- import cn.hutool.core.collection.CollectionUtil;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.core.lang.Assert;
- import jakarta.validation.Valid;
- import javax.swing.*;
- /**
- * <p>
- * 优惠券表 服务实现类
- * </p>
- *
- * @author gs
- * @since 2025-03-07
- */
- @Service
- public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> implements ICouponService {
- @Autowired
- private CouponConverter converter;
- @Autowired
- private IContractService contractService;
- @Autowired
- private SysUserService userService;
- @Autowired
- private RedisTemplate redisTemplate;
- @Autowired
- private IBarnRecordService barnRecordService;
- /**
- * 分页查询
- */
- @Override
- public Page<CouponVO> getPage(CouponQuery queryParams) {
- // 查询参数
- int pageNum = queryParams.getPageNum();
- int pageSize = queryParams.getPageSize();
- Integer status = queryParams.getStatus();
- // String keywords = queryParams.getKeywords();
- // 查询数据
- Page<Coupon> dictItemPage = this.page(
- new Page<>(pageNum, pageSize),
- new LambdaQueryWrapper<Coupon>()
- .eq(status != null, Coupon::getStatus, status)
- .le(StrUtil.isNotBlank(queryParams.getEffectiveTimeEnd()),Coupon::getEffectiveTime,queryParams.getEffectiveTimeEnd())
- .ge(StrUtil.isNotBlank(queryParams.getEffectiveTimeBegin()),Coupon::getEffectiveTime,queryParams.getEffectiveTimeBegin())
- //.like(StrUtil.isNotBlank(keywords), Coupon::getCategoryName, keywords)
- );
- // 实体转换
- Page<CouponVO> pageResult = converter.entity2Page(dictItemPage);
- List<CouponVO> records = pageResult.getRecords();
- if (CollectionUtil.isNotEmpty(records)) {
- for (CouponVO record : records) {
- List<BarnRecord> list = barnRecordService.list(new LambdaQueryWrapper<BarnRecord>().eq(BarnRecord::getId, record.getGoodsId()).orderByDesc(BarnRecord::getCreateTime));
- if (CollectionUtil.isNotEmpty(list)) {
- record.setCarNumber(list.get(0).getCarNumber());
- }
- }
- }
- return pageResult;
- }
- /**
- * 保存表单
- */
- @Override
- public CouponForm saveForm(@Valid CouponForm form) {
- // 校验是否已领取过优惠券
- List<Coupon> list = this.list(new LambdaQueryWrapper<Coupon>().eq(Coupon::getToUserId, SecurityUtils.getUserId()).eq(Coupon::getGoodsId, form.getGoodsId()));
- Assert.isTrue(CollectionUtil.isEmpty(list), "已存在领取的优惠券");
- Object contractIdEnc = redisTemplate.opsForValue().get(form.getContractIdEnc());
- Assert.isTrue(contractIdEnc != null, "二维码已过期");
- String contractId = contractIdEnc.toString();
- form.setContractId(Long.parseLong(contractId));
- // 根据协议id生成优惠券
- if (form.getContractId() != null) {
- Contract contract = contractService.getById(form.getContractId());
- Assert.isTrue(contract != null, "关联协议数据不存在");
- // 校验协议用户是否还有优惠券
- Long count = this.count(new LambdaQueryWrapper<Coupon>().eq(Coupon::getContractId, form.getContractId()));
- Assert.isTrue(count != null && contract.getMaxCouponCount() != null && count < contract.getMaxCouponCount() , "优惠券已领完");
- SysUser user = userService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getContractId, form.getContractId()));
- Assert.isTrue(user != null, "关联协议用户数据不存在");
- form.setFromUserId(user.getId());
- form.setToUserId(SecurityUtils.getUserId());
- form.setScenes(1);// 使用场景(1-停车场, 2-其他场景
- // 1 扫码抵用金额 2扫码抵用时长
- if (contract.getScanType().equals("1")) {
- form.setDenomination(contract.getDiscountAmount());
- form.setCouponType(1);// 优惠券类型(1-金额券, 2-时长券)
- } else if (contract.getScanType().equals("2")) {
- form.setDenomination(contract.getDiscountMinute() != null ? new BigDecimal(contract.getDiscountMinute()) : BigDecimal.ZERO);
- form.setCouponType(2);// 优惠券类型(1-金额券, 2-时长券)
- }
- form.setEffectiveTime(LocalDateTime.now());
- // 将 Date 转换为 Instant
- Instant outInstant = contract.getEndDate().toInstant();
- // 将 Instant 转换为 LocalDateTime(假设使用系统默认时区)
- LocalDateTime outDateTime = outInstant.atZone(ZoneId.systemDefault()).toLocalDateTime();
- form.setExpireTime(outDateTime);
- form.setStatus(0);// 状态(0-已使用, 1-未使用, 2-锁定)
- }
- // 实体对象转换 form->entity
- Coupon entity = converter.form2Entity(form);
- // 持久化
- this.save(entity);
- CouponForm result = converter.entity2Form(entity);
- return result;
- }
- /**
- * 更新
- */
- @Override
- public boolean updateForm(Long id, CouponForm form) {
- Coupon entity = converter.form2Entity(form);
- entity.setId(id);
- boolean result = this.updateById(entity);
- return result;
- }
- /**
- * 获取表单数据
- */
- @Override
- public CouponForm getFormData(Long id) {
- // 获取entity
- Coupon entity = this.getById(id);
- Assert.isTrue(entity != null, "优惠券表不存在");
- // 实体转换
- CouponForm form = converter.entity2Form(entity);
- return form;
- }
- }
|