From 3a0d707a5add3c88bd9b5f93668419fa6f803101 Mon Sep 17 00:00:00 2001 From: eric <465889110@qq.com> Date: Tue, 14 Oct 2025 16:32:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=B5=E5=AD=90=E5=9B=B4?= =?UTF-8?q?=E6=A0=8Fredis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/RedisKeyConstants.java | 2 + .../mapper/ElectronicFenceRuleMapper.java | 17 +++++ .../sczx/order/po/ElectronicFenceRulePO.java | 66 +++++++++++++++++++ .../repository/ElectronicFenceRuleRepo.java | 16 +++++ .../impl/ElectronicFenceRuleRepoImpl.java | 21 ++++++ .../order/service/impl/OrderServiceImpl.java | 39 ++++++++++- .../java/com/sczx/order/utils/RedisUtil.java | 4 ++ .../mapper/ElectronicFenceRuleMapper.xml | 5 ++ 8 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/sczx/order/mapper/ElectronicFenceRuleMapper.java create mode 100644 src/main/java/com/sczx/order/po/ElectronicFenceRulePO.java create mode 100644 src/main/java/com/sczx/order/repository/ElectronicFenceRuleRepo.java create mode 100644 src/main/java/com/sczx/order/repository/impl/ElectronicFenceRuleRepoImpl.java create mode 100644 src/main/resources/mapper/ElectronicFenceRuleMapper.xml 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 @@ + + + + +