puzhibing
2026-05-22 6912e074af61b73307d2fc31b1b8f4974f5eb4f3
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.account.api.dto.CouponListDto;
import com.ruoyi.account.api.dto.GrantCouponDto;
@@ -9,9 +10,11 @@
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserCar;
import com.ruoyi.account.api.model.TAppUserTag;
import com.ruoyi.account.api.vo.AppUserWhitelistMatchVO;
import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery;
import com.ruoyi.account.service.TAppUserService;
import com.ruoyi.account.service.TAppUserTagService;
import com.ruoyi.account.service.TAppUserWhitelistService;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
@@ -19,6 +22,7 @@
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.log.enums.OperatorType;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.other.api.vo.CouponListVOVO;
import com.ruoyi.account.api.vo.ExchangeRecordVO;
@@ -33,18 +37,22 @@
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.dto.ExchangeCodeBindDTO;
import com.ruoyi.other.api.feignClient.OtherClient;
import com.ruoyi.other.api.vo.ExchangeCodeBindResultVO;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -78,6 +86,11 @@
    private TAppUserTagService appUserTagService;
    @Autowired
    private TAppUserService appUserService;
    @Resource
    private TAppUserWhitelistService whitelistService;
    @Autowired
    private RedissonClient redissonClient;
    
    /**
@@ -100,8 +113,26 @@
    @ApiOperation(value = "添加车辆", tags = {"小程序-扫一扫"})
    @PostMapping(value = "/scan/addCar")
    public AjaxResult addCar(@RequestBody TAppUserCar dto) {
        dto.setAppUserId(tokenService.getLoginUserApplet().getUserId());
        appUserCarService.save(dto);
        Long userId = tokenService.getLoginUserApplet().getUserId();
        RLock lock = redissonClient.getLock("CREATE_CAR:" + userId);
        try {
            boolean tryLock = lock.tryLock(10, 10, TimeUnit.SECONDS);
            if(tryLock){
                dto.setAppUserId(userId);
                TAppUserCar one = appUserCarService.getOne(new LambdaQueryWrapper<TAppUserCar>()
                        .eq(TAppUserCar::getLicensePlate, dto.getLicensePlate())
                        .eq(TAppUserCar::getAppUserId, dto.getAppUserId())
                        .eq(TAppUserCar::getDelFlag, 0));
                if(null != one){
                    return AjaxResult.error("车辆已存在");
                }
                appUserCarService.save(dto);
            }
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }finally {
            lock.unlock();
        }
        return AjaxResult.success();
    }
    /**
@@ -121,25 +152,18 @@
        String token = SecurityUtils.getToken(ServletUtils.getRequest());
        if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(token)){
            List<TAppUserCar> cars = appUserCarService.list(new QueryWrapper<TAppUserCar>()
                    .eq("app_user_id",tokenService.getLoginUserApplet().getUserId())
                        .eq("app_user_id",tokenService.getLoginUserApplet().getUserId())
                            .eq("del_flag", 0)
                    .orderByDesc("create_time"));
            Long data1 = chargingOrderClient.getCar(tokenService.getLoginUserApplet().getUserId().toString()).getData();
            if (!cars.isEmpty()){
                if (null == data1 || data1 == -1){
                    // 没有充电订单 展示最新添加的车辆
                    data.setLicensePlate(cars.get(0).getLicensePlate());
                    data.setVehicleBrand(cars.get(0).getVehicleBrand());
                    data.setId(cars.get(0).getId().toString());
                }else{
                    for (TAppUserCar car : cars) {
                        if (car.getId().equals(data1)){
                            data.setLicensePlate(car.getLicensePlate());
                            data.setVehicleBrand(car.getVehicleBrand());
                            data.setId(car.getId().toString());
                        }
                    }
                }
                data.setLicensePlate(cars.get(0).getLicensePlate());
                data.setVehicleBrand(cars.get(0).getVehicleBrand());
                data.setId(cars.get(0).getId().toString());
            }
            AppUserWhitelistMatchVO whitelist = whitelistService.matchWhitelist(tokenService.getLoginUserApplet().getUserId(), chargingGun.getSiteId());
            data.setWhitelistMatched(Boolean.TRUE.equals(whitelist.getMatched()));
            data.setWhitelistBenefitType(whitelist.getBenefitType());
            data.setWhitelistBenefitName(whitelist.getBenefitName());
        }
        Integer data2 = otherClient.getAddCarIntegral().getData();
        data.setIntegral(data2);
@@ -232,6 +256,15 @@
            count = 0L;
        }
        return R.ok(count);
    }
    @ApiOperation(value = "兑换码绑定", tags = {"小程序-兑换码"})
    @PostMapping(value = "/exchangeCode/bind")
    public AjaxResult<ExchangeCodeBindResultVO> bindExchangeCode(@RequestBody ExchangeCodeBindDTO dto) {
        Long userId = tokenService.getLoginUserApplet().getUserId();
        TAppUser user = appUserService.getById(userId);
        ExchangeCodeBindResultVO data = otherClient.bindExchangeCode(dto, userId, user == null ? "" : user.getPhone()).getData();
        return AjaxResult.ok(data);
    }
    
@@ -336,4 +369,3 @@
        return R.ok();
    }
}