RiderDeviceServiceImpl.java 3.04 KB
package com.diligrp.rider.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.diligrp.rider.dto.DeviceBindDTO;
import com.diligrp.rider.entity.RiderDevice;
import com.diligrp.rider.mapper.RiderDeviceMapper;
import com.diligrp.rider.service.RiderDeviceService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Slf4j
@Service
@RequiredArgsConstructor
public class RiderDeviceServiceImpl implements RiderDeviceService {

    private final RiderDeviceMapper deviceMapper;

    @Override
    @Transactional
    public void bind(Long riderId, DeviceBindDTO dto) {
        long now = System.currentTimeMillis();

        // 同一 registrationId 全局唯一:若已存在则覆盖归属
        LambdaQueryWrapper<RiderDevice> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(RiderDevice::getRegistrationId, dto.getRegistrationId());
        RiderDevice existing = deviceMapper.selectOne(wrapper);

        if (existing != null) {
            existing.setRiderId(riderId);
            existing.setPlatform(dto.getPlatform());
            existing.setDeviceInfo(dto.getDeviceInfo() == null ? "" : dto.getDeviceInfo());
            existing.setAppVersion(dto.getAppVersion() == null ? "" : dto.getAppVersion());
            existing.setStatus(1);
            existing.setLastActiveTime(now);
            existing.setUpdateTime(now);
            deviceMapper.updateById(existing);
            log.info("设备绑定刷新 riderId={} registrationId={}", riderId, dto.getRegistrationId());
            return;
        }

        RiderDevice device = new RiderDevice();
        device.setRiderId(riderId);
        device.setRegistrationId(dto.getRegistrationId());
        device.setPlatform(dto.getPlatform());
        device.setDeviceInfo(dto.getDeviceInfo() == null ? "" : dto.getDeviceInfo());
        device.setAppVersion(dto.getAppVersion() == null ? "" : dto.getAppVersion());
        device.setStatus(1);
        device.setLastActiveTime(now);
        device.setCreateTime(now);
        device.setUpdateTime(now);
        deviceMapper.insert(device);
        log.info("设备绑定新增 riderId={} registrationId={}", riderId, dto.getRegistrationId());
    }

    @Override
    @Transactional
    public void unbind(Long riderId, String registrationId) {
        if (registrationId == null || registrationId.isEmpty()) {
            return;
        }
        long now = System.currentTimeMillis();
        LambdaUpdateWrapper<RiderDevice> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(RiderDevice::getRegistrationId, registrationId)
                .eq(RiderDevice::getRiderId, riderId)
                .set(RiderDevice::getStatus, 0)
                .set(RiderDevice::getUpdateTime, now);
        deviceMapper.update(null, wrapper);
        log.info("设备解绑 riderId={} registrationId={}", riderId, registrationId);
    }
}