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,12 +10,20 @@
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;
import com.ruoyi.common.core.utils.ServletUtils;
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;
import com.ruoyi.account.service.TAppCouponService;
@@ -28,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;
/**
@@ -73,6 +86,11 @@
    private TAppUserTagService appUserTagService;
    @Autowired
    private TAppUserService appUserService;
    @Resource
    private TAppUserWhitelistService whitelistService;
    @Autowired
    private RedissonClient redissonClient;
    
    /**
@@ -91,11 +109,30 @@
     * @param dto
     * @return
     */
    @Log(title = "【扫一扫】添加车辆", businessType = BusinessType.INSERT,operatorType = OperatorType.MOBILE)
    @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();
    }
    /**
@@ -111,28 +148,26 @@
        data.setChargingGunId(id);
        data.setSiteId(chargingGun.getSiteId());
        data.setChargeMode(chargingGun.getChargeMode());
        List<TAppUserCar> cars = appUserCarService.list(new QueryWrapper<TAppUserCar>()
                .eq("app_user_id",tokenService.getLoginUserApplet().getUserId())
                .orderByDesc("create_time"));
        Long data1 = chargingOrderClient.getCar(tokenService.getLoginUserApplet().getUserId().toString()).getData();
        Integer data2 = otherClient.getAddCarIntegral().getData();
        data.setIntegral(data2);
        if (!cars.isEmpty()){
            if (null == data1 || data1 == -1){
                // 没有充电订单 展示最新添加的车辆
        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("del_flag", 0)
                    .orderByDesc("create_time"));
            if (!cars.isEmpty()){
                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());
                    }
                }
            }
            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);
        BigDecimal electrovalence = data.getElectrovalence();
        BigDecimal vipElectrovalence = data.getVipElectrovalence();
        // 计算预付金额能充多少度普通电
@@ -162,8 +197,12 @@
    @ApiOperation(value = "选择车辆列表", tags = {"小程序-扫一扫"})
    @PostMapping(value = "/scan/carList")
    public R<List<TAppUserCar>> carList() {
        String token = SecurityUtils.getToken(ServletUtils.getRequest());
        if(!StringUtils.hasLength(token)){
            return R.ok(new ArrayList<>());
        }
        List<TAppUserCar> appUserId = appUserCarService.list(new QueryWrapper<TAppUserCar>()
                .eq("app_user_id",tokenService.getLoginUserApplet().getUserId()));
                .eq("app_user_id",tokenService.getLoginUserApplet().getUserId()).eq("del_flag", 0));
        appUserId.forEach(s->s.setId_(s.getId().toString()));
        return R.ok(appUserId);
    }
@@ -207,7 +246,7 @@
    public R<List<ExchangeRecordVO>> getExchangeRecordByCouponId(@RequestBody ExchangeRecordGoodsQuery couponId){
        return R.ok(tAppCouponService.pagelist(couponId));
    }
    @ApiOperation(value = "优惠卷可用数量", tags = {"小程序-站点管理-站点详情"})
    @GetMapping(value = "/couponCount")
    public R<Long> couponCount() {
@@ -217,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);
    }
    
@@ -321,4 +369,3 @@
        return R.ok();
    }
}