diff --git a/src/main/java/com/sczx/order/common/constant/RedisKeyConstants.java b/src/main/java/com/sczx/order/common/constant/RedisKeyConstants.java
index ef56aa7..b186f45 100644
--- a/src/main/java/com/sczx/order/common/constant/RedisKeyConstants.java
+++ b/src/main/java/com/sczx/order/common/constant/RedisKeyConstants.java
@@ -7,4 +7,6 @@ public interface RedisKeyConstants {
String BIND_CAR_KEY = SERVICE_PREFIX + "bindCar:";
+ String E_Fence_KEY = SERVICE_PREFIX + "eFence:";
+
}
diff --git a/src/main/java/com/sczx/order/mapper/ElectronicFenceRuleMapper.java b/src/main/java/com/sczx/order/mapper/ElectronicFenceRuleMapper.java
new file mode 100644
index 0000000..e44219a
--- /dev/null
+++ b/src/main/java/com/sczx/order/mapper/ElectronicFenceRuleMapper.java
@@ -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;
+
+/**
+ *
+ * 订单车辆变更表 Mapper 接口
+ *
+ *
+ * @author zhangli
+ * @since 2025-09-03 23:12:55
+ */
+public interface ElectronicFenceRuleMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/sczx/order/po/ElectronicFenceRulePO.java b/src/main/java/com/sczx/order/po/ElectronicFenceRulePO.java
new file mode 100644
index 0000000..8b9b459
--- /dev/null
+++ b/src/main/java/com/sczx/order/po/ElectronicFenceRulePO.java
@@ -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;
+
+/**
+ *
+ * 套餐规则与电子围栏关联表
+ *
+ *
+ * @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;
+}
diff --git a/src/main/java/com/sczx/order/repository/ElectronicFenceRuleRepo.java b/src/main/java/com/sczx/order/repository/ElectronicFenceRuleRepo.java
new file mode 100644
index 0000000..d4b4315
--- /dev/null
+++ b/src/main/java/com/sczx/order/repository/ElectronicFenceRuleRepo.java
@@ -0,0 +1,16 @@
+package com.sczx.order.repository;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.sczx.order.po.ElectronicFenceRulePO;
+
+/**
+ *
+ * 套餐规则与电子围栏关联表 服务类
+ *
+ *
+ * @author lingma
+ * @since 2025-07-25 17:17:28
+ */
+public interface ElectronicFenceRuleRepo extends IService {
+
+}
diff --git a/src/main/java/com/sczx/order/repository/impl/ElectronicFenceRuleRepoImpl.java b/src/main/java/com/sczx/order/repository/impl/ElectronicFenceRuleRepoImpl.java
new file mode 100644
index 0000000..7b7df86
--- /dev/null
+++ b/src/main/java/com/sczx/order/repository/impl/ElectronicFenceRuleRepoImpl.java
@@ -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;
+
+/**
+ *
+ * 套餐规则与电子围栏关联表 服务实现类
+ *
+ *
+ * @author lingma
+ * @since 2025-07-25 17:17:28
+ */
+@Service
+public class ElectronicFenceRuleRepoImpl extends ServiceImpl implements ElectronicFenceRuleRepo {
+
+}
diff --git a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java
index 016c631..fa4aee2 100644
--- a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java
@@ -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 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已存入Redis,key: {}, 电子围栏ID: {}", redisEfenceKey, electronicFenceRulePO.getElectronicFenceId());
+ } else {
+ log.warn("未找到租车规则ID为 {} 的电子围栏规则", orderMainPO.getRentCarRuleId());
+ }
+
LambdaQueryWrapper 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 carImagePOList = new ArrayList<>();
@@ -1339,7 +1358,18 @@ public class OrderServiceImpl implements OrderService {
.set(CarPO::getBrsStatus, CarStatusEnum.NORMAL.getCode());
carRepo.update(oldCarPOLambdaUpdateWrapper);
+ //更新电子围栏
+ LambdaUpdateWrapper 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());
diff --git a/src/main/java/com/sczx/order/utils/RedisUtil.java b/src/main/java/com/sczx/order/utils/RedisUtil.java
index 00e9d8c..af5c64a 100644
--- a/src/main/java/com/sczx/order/utils/RedisUtil.java
+++ b/src/main/java/com/sczx/order/utils/RedisUtil.java
@@ -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);
}
diff --git a/src/main/resources/mapper/ElectronicFenceRuleMapper.xml b/src/main/resources/mapper/ElectronicFenceRuleMapper.xml
new file mode 100644
index 0000000..c37ec54
--- /dev/null
+++ b/src/main/resources/mapper/ElectronicFenceRuleMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+