redis新增ecu_sn的区域id

This commit is contained in:
yanglei 2026-03-05 16:35:04 +08:00
parent ce54a49c7e
commit bad1d0435b
5 changed files with 101 additions and 5 deletions

View File

@ -13,5 +13,5 @@ public interface EbikeContents {
/**
* 中控ecu区域id
*/
String ECU_SN = "bike:ecusn:regionid";
String ECU_SN = "bike:ecusn:regionid:";
}

View File

@ -0,0 +1,21 @@
package com.cdzy.operations.model.vo;
import lombok.Data;
/**
* @author yanglei
* @since 2026-03-05 11:22
*/
@Data
public class EbikeEcuSnInfoVo {
/**
* 车辆编号
*/
private String bikeCode;
/**
* 中控SN码
*/
private String ecuSn;
}

View File

@ -23,13 +23,18 @@ import com.cdzy.operations.mapper.EbikeDefaultBillingConfigurationMapper;
import com.cdzy.operations.mapper.EbikeRegionMapper;
import com.cdzy.operations.mapper.EbikeSiteMapper;
import com.cdzy.operations.mapper.EbikeSpecialBillingConfigurationMapper;
import com.cdzy.operations.model.dto.*;
import com.cdzy.operations.model.dto.EbikeBikeInfoDto;
import com.cdzy.operations.model.dto.EbikeDto;
import com.cdzy.operations.model.dto.EbikeScanInfoDto;
import com.cdzy.operations.model.dto.EbikeScanOrderDto;
import com.cdzy.operations.model.dto.EbikeUserBikeInfo;
import com.cdzy.operations.model.dto.EbikeUserLockDto;
import com.cdzy.operations.model.entity.EbikeBatteryInfo;
import com.cdzy.operations.model.entity.EbikeBikeInfo;
import com.cdzy.operations.model.entity.EbikeBikeOrder;
import com.cdzy.operations.model.entity.EbikeBikeQr;
import com.cdzy.operations.model.entity.EbikeDefaultBillingConfiguration;
import com.cdzy.operations.model.entity.EbikeCarrierConfiguration;
import com.cdzy.operations.model.entity.EbikeDefaultBillingConfiguration;
import com.cdzy.operations.model.entity.EbikeEcuInfo;
import com.cdzy.operations.model.entity.EbikeInventoryRecord;
import com.cdzy.operations.model.entity.EbikeRegion;
@ -37,7 +42,13 @@ import com.cdzy.operations.model.entity.EbikeSite;
import com.cdzy.operations.model.entity.EbikeSpecialBillingConfiguration;
import com.cdzy.operations.model.entity.EbikeSpecialDay;
import com.cdzy.operations.model.entity.EbikeSpecialTime;
import com.cdzy.operations.model.vo.*;
import com.cdzy.operations.model.vo.EbikeBatchLaunchVo;
import com.cdzy.operations.model.vo.EbikeBatchUnLaunchVo;
import com.cdzy.operations.model.vo.EbikeBikeBindVo;
import com.cdzy.operations.model.vo.EbikeBikeRadiusVo;
import com.cdzy.operations.model.vo.EbikeEcuMsgDto;
import com.cdzy.operations.model.vo.EbikeEcuSnInfoVo;
import com.cdzy.operations.model.vo.EbikeInventoryVo;
import com.cdzy.operations.service.EbikeBikeInfoService;
import com.cdzy.operations.service.EbikeCarrierConfigurationService;
import com.cdzy.operations.service.EbikeEcuInfoService;
@ -316,6 +327,11 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
EbikeCarrierConfiguration configuration = orderConfigurationService.getConfigurationByOperationId(region.getOperatorId());
redisUtil.saveInspectionOrder(bikeCode, null, configuration != null ? configuration.getInspectionIntervalDuration() : 30L, TimeUnit.DAYS);
}
// 批量获取车辆编码获取车辆ecu_sn
List<EbikeEcuSnInfoVo> bikeEcuSn = getEcuSn(bikeCodes);
for (EbikeEcuSnInfoVo ecsSnInfo : bikeEcuSn) {
redisUtil.saveEcuSnRegionId(ecsSnInfo.getEcuSn(), launchVo.getRegionId());
}
}
@Override
@ -329,6 +345,11 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
for (String bikeCode : bikeCodes) {
redisUtil.deleteInspectionOrder(bikeCode);
}
// 批量获取车辆编码获取车辆ecu_sn
List<EbikeEcuSnInfoVo> bikeEcuSn = getEcuSn(bikeCodes);
for (EbikeEcuSnInfoVo ecsSnInfo : bikeEcuSn) {
redisUtil.deleteEcuSnRegionId(ecsSnInfo.getEcuSn());
}
}
@Override
@ -549,6 +570,13 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
@Override
public void changeEcu(String bikeCode, String ecuSn) {
// 获取旧的ecu_sn
QueryWrapper query = QueryWrapper.create()
.select(EBIKE_ECU_INFO.ECU_SN)
.from(EBIKE_BIKE_INFO)
.leftJoin(EBIKE_ECU_INFO).on(EBIKE_BIKE_INFO.ECU_ID.eq(EBIKE_ECU_INFO.ECU_ID))
.where(EBIKE_BIKE_INFO.BIKE_CODE.eq(bikeCode));
String oldEcuSn = this.mapper.selectOneByQueryAs(query, String.class);
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EBIKE_ECU_INFO.ECU_SN.eq(ecuSn));
EbikeEcuInfo ebikeEcuInfo = ebikeEcuInfoService.getOne(queryWrapper);
@ -572,6 +600,11 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
throw new EbikeException("车辆骑行中暂时无法换绑");
}
updateById(bikeInfo);
// 车辆上架,删除旧ecu_sn,保存新的ecu_sn
if (bikeInfo.getStatus() == 1) {
redisUtil.deleteEcuSnRegionId(oldEcuSn);
redisUtil.saveEcuSnRegionId(ecuSn, bikeInfo.getRegionId());
}
}
@Override
@ -685,6 +718,21 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
}
/**
* 获取车辆列表的ecs_sn编码
* @param bikeCodes 车辆编号列表
* @return 中控sn码
*/
private List<EbikeEcuSnInfoVo> getEcuSn(List<String> bikeCodes) {
QueryWrapper query = QueryWrapper.create()
.select(EBIKE_BIKE_INFO.BIKE_CODE, EBIKE_ECU_INFO.ECU_SN)
.from(EBIKE_BIKE_INFO)
.leftJoin(EBIKE_ECU_INFO).on(EBIKE_BIKE_INFO.ECU_ID.eq(EBIKE_ECU_INFO.ECU_ID))
.where(EBIKE_BIKE_INFO.BIKE_CODE.in(bikeCodes));
return this.mapper.selectListByQueryAs(query, EbikeEcuSnInfoVo.class);
}
static EbikeSpecialDay getEbikeSpecialDay(List<EbikeSpecialDay> ebikeSpecialDays) {
LocalDate today = LocalDate.now();
DayOfWeek dayOfWeek = today.getDayOfWeek();

View File

@ -401,6 +401,13 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
@Override
public void batteryChange(EbikeBatteryChangeVo changeVo) {
// 获取旧的ecu_sn
QueryWrapper query = QueryWrapper.create()
.select(EBIKE_ECU_INFO.ECU_SN)
.from(EBIKE_BIKE_INFO)
.leftJoin(EBIKE_ECU_INFO).on(EBIKE_BIKE_INFO.ECU_ID.eq(EBIKE_ECU_INFO.ECU_ID))
.where(EBIKE_BIKE_INFO.BIKE_CODE.eq(changeVo.getBikeCode()));
String oldEcuSn = bikeInfoMapper.selectOneByQueryAs(query, String.class);
String bikeCode = changeVo.getBikeCode();
String batteryCode = changeVo.getBatteryCode();
QueryWrapper queryWrapper = QueryWrapper.create()
@ -463,7 +470,11 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl<EbikeBikeOrderMapper,
if (ebikeBikeInfo != null) {
throw new EbikeException("该中控编号已绑定其他车辆");
}
// 车辆上架删除旧区域id保存新区域id
if (bikeInfo.getStatus() == 1) {
redisUtil.deleteEcuSnRegionId(oldEcuSn);
redisUtil.saveEcuSnRegionId(batteryCode, bikeInfo.getRegionId());
}
bikeInfo.setEcuId(ecuInfo.getEcuId());
bikeInfo.setBatteryId(null);
bikeInfoMapper.update(bikeInfo);

View File

@ -1,5 +1,7 @@
package com.cdzy.operations.utils;
import com.cdzy.common.enums.EbikeContents;
import com.cdzy.operations.model.vo.EbikeEcuSnInfoVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
@ -544,6 +546,20 @@ public class RedisUtil {
return get(Database.DB2, BIKE_ECU_PREFIX + ecuSn);
}
/**
* 数据库2专用存储ecs_sn的区域id
*/
public void saveEcuSnRegionId(String ecsSn, Long regionId) {
set(Database.DB2, EbikeContents.ECU_SN + ecsSn, regionId);
}
/**
* 数据库2专用删除ecs_sn的区域id
*/
public void deleteEcuSnRegionId(String ecsSn) {
delete(Database.DB2, EbikeContents.ECU_SN + ecsSn);
}
/**
* 批量获取ECU信息基于已知的SN列表
*