添加电子围栏redis

This commit is contained in:
2025-10-14 16:32:55 +08:00
parent b3ba5ef5b1
commit 3a0d707a5a
8 changed files with 169 additions and 1 deletions

View File

@ -7,4 +7,6 @@ public interface RedisKeyConstants {
String BIND_CAR_KEY = SERVICE_PREFIX + "bindCar:";
String E_Fence_KEY = SERVICE_PREFIX + "eFence:";
}

View File

@ -0,0 +1,17 @@
package com.sczx.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sczx.order.po.ElectronicFenceRulePO;
import com.sczx.order.po.OrderCarChangePO;
/**
* <p>
* 订单车辆变更表 Mapper 接口
* </p>
*
* @author zhangli
* @since 2025-09-03 23:12:55
*/
public interface ElectronicFenceRuleMapper extends BaseMapper<ElectronicFenceRulePO> {
}

View File

@ -0,0 +1,66 @@
package com.sczx.order.po;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 套餐规则与电子围栏关联表
* </p>
*
* @author lingma
* @since 2025-07-25 17:17:28
*/
@Getter
@Setter
@TableName("zc_electronic_fence_rule")
@ApiModel(value = "ElectronicFenceRulePO对象", description = "套餐规则与电子围栏关联表")
public class ElectronicFenceRulePO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("规则ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty("车辆规则ID")
private Long carRuleId;
@ApiModelProperty("电子围栏ID")
private Long electronicFenceId;
@ApiModelProperty("排序")
private Integer sortOrder;
@ApiModelProperty("删除标志0代表存在 2代表删除")
private String delFlag;
@ApiModelProperty("创建者")
private String createBy;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@ApiModelProperty("更新者")
private String updateBy;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty("更新时间")
private LocalDateTime updateTime;
@ApiModelProperty("备注")
private String remark;
}

View File

@ -0,0 +1,16 @@
package com.sczx.order.repository;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sczx.order.po.ElectronicFenceRulePO;
/**
* <p>
* 套餐规则与电子围栏关联表 服务类
* </p>
*
* @author lingma
* @since 2025-07-25 17:17:28
*/
public interface ElectronicFenceRuleRepo extends IService<ElectronicFenceRulePO> {
}

View File

@ -0,0 +1,21 @@
package com.sczx.order.repository.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sczx.order.po.ElectronicFenceRulePO;
import com.sczx.order.repository.ElectronicFenceRuleRepo;
import com.sczx.order.mapper.ElectronicFenceRuleMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 套餐规则与电子围栏关联表 服务实现类
* </p>
*
* @author lingma
* @since 2025-07-25 17:17:28
*/
@Service
public class ElectronicFenceRuleRepoImpl extends ServiceImpl<ElectronicFenceRuleMapper, ElectronicFenceRulePO> implements ElectronicFenceRuleRepo {
}

View File

@ -60,6 +60,9 @@ public class OrderServiceImpl implements OrderService {
@Autowired
private OrderCarChangeRepo orderCarChangeRepo;
@Autowired
private ElectronicFenceRuleRepo electronicFenceRuleRepo;
@Autowired
private JwtUtil jwtUtil;
@ -1182,8 +1185,22 @@ public class OrderServiceImpl implements OrderService {
if (status.equals("40001") || status.equals("40002") || status.equals("40003") || status.equals("40005") || status.equals("40006")){
throw new BizException("此用户在租电APP还有未完成的订单请联系用户完成租电订单或是驳回此租车订单");
}
}
//绑定电子围栏
LambdaQueryWrapper<ElectronicFenceRulePO> electqueryWrapper = new LambdaQueryWrapper<>();
electqueryWrapper.eq(ElectronicFenceRulePO::getCarRuleId, orderMainPO.getRentCarRuleId())
.eq(ElectronicFenceRulePO::getDelFlag, "0")
.orderByAsc(ElectronicFenceRulePO::getSortOrder);
ElectronicFenceRulePO electronicFenceRulePO = electronicFenceRuleRepo.getOne(electqueryWrapper);
if (electronicFenceRulePO != null) {
String redisEfenceKey = RedisKeyConstants.E_Fence_KEY + carDTO.getLotNumber();
redisUtil.set(redisEfenceKey, electronicFenceRulePO.getElectronicFenceId().toString());
log.info("电子围栏ID已存入Rediskey: {}, 电子围栏ID: {}", redisEfenceKey, electronicFenceRulePO.getElectronicFenceId());
} else {
log.warn("未找到租车规则ID为 {} 的电子围栏规则", orderMainPO.getRentCarRuleId());
}
LambdaQueryWrapper<OrderSubPO> queryWrapper = new LambdaQueryWrapper<>();
@ -1313,6 +1330,8 @@ public class OrderServiceImpl implements OrderService {
updateWrapper.eq(OrderMainPO::getOrderNo, bindCarToOrderReq.getOrderNo());
orderMainRepo.update(updateWrapper);
if(!CollectionUtils.isEmpty(bindCarToOrderReq.getImageList())){
//添加车辆图片
List<OrderCarImgPO> carImagePOList = new ArrayList<>();
@ -1339,7 +1358,18 @@ public class OrderServiceImpl implements OrderService {
.set(CarPO::getBrsStatus, CarStatusEnum.NORMAL.getCode());
carRepo.update(oldCarPOLambdaUpdateWrapper);
//更新电子围栏
LambdaUpdateWrapper<CarPO> oldCarIotPOLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
oldCarIotPOLambdaUpdateWrapper.eq(CarPO::getId, orderMainPO.getVehicleId());
CarPO oldCarPO = carRepo.getOne(oldCarIotPOLambdaUpdateWrapper);
String redisEfenceKey = RedisKeyConstants.E_Fence_KEY + oldCarPO.getLotNumber();
if(redisUtil.get(redisEfenceKey) != null){
String efence = redisUtil.get(redisEfenceKey);
String newKey = RedisKeyConstants.E_Fence_KEY + carDTO.getLotNumber();
redisUtil.delete(redisEfenceKey);
redisUtil.set(newKey, efence);
}
//记录变更记录
OrderCarChangePO orderCarChangePO = new OrderCarChangePO();
@ -1430,6 +1460,13 @@ public class OrderServiceImpl implements OrderService {
carPOLambdaUpdateWrapper.eq(CarPO::getId, orderDTO.getVehicleId())
.set(CarPO::getBrsStatus, CarStatusEnum.NORMAL.getCode());
carRepo.update(carPOLambdaUpdateWrapper);
//删除车辆电子围栏缓存
String redisEfenceKey = RedisKeyConstants.E_Fence_KEY + carPO.getLotNumber();
if (redisUtil.get(redisEfenceKey) != null){
redisUtil.deleteRedisLock(redisEfenceKey);
}
//异步执行分润
ThreadPoolUtils.getThreadPool().execute(() -> {
orderDistribService.saveOrderDistrib(returnCarReq.getOrderNo());

View File

@ -24,6 +24,10 @@ public class RedisUtil {
redisTemplate.opsForValue().set(key, value, timeout, unit);
}
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
public String get(String key) {
return redisTemplate.opsForValue().get(key);
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sczx.order.mapper.ElectronicFenceRuleMapper">
</mapper>