From 1a68ba3e9e4255aeb8c7c12fdaabc905e55fae34 Mon Sep 17 00:00:00 2001 From: tzy Date: Fri, 18 Apr 2025 16:53:51 +0800 Subject: [PATCH] =?UTF-8?q?refactor(order):=20=E4=BC=98=E5=8C=96=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91=E5=92=8C=E6=80=A7?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构了订单预览添加逻辑,增加了对车辆信息的查询和验证 - 改进了预约单过期处理任务,提高了查询效率和代码可读性 --- .../impl/OrderSwapBatteryServiceImpl.java | 45 +++++++---- .../hd/cloud/task/OrderSwapBatteryTask.java | 79 ++++++++++--------- 2 files changed, 70 insertions(+), 54 deletions(-) diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java index bd517e3..68f3720 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java @@ -89,19 +89,19 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { private BatteryStationDao batteryStationDao; @Resource private GZHTemplateMessageService gzhTemplateMessageService; - @Resource - private BatteryStationHdFeeStandardDao batteryStationHdFeeStandardDao; - @Override public Result addPre(OrderSwapBatteryPre osbp) { // 1. 检查车辆 - boolean b1 = vehicleInfoDao.exists(new QueryWrapper() - .eq("del_flag", 0) - .eq("plate_num", osbp.getPlateNum())); - if (!b1) { - return new Result().error("车辆未注册!"); + LambdaQueryWrapper vehicleQuery = new LambdaQueryWrapper() + .eq(VehicleInfo::getPlateNum, osbp.getPlateNum()) + .select(VehicleInfo::getOwnerType); + + VehicleInfo vehicleInfo = vehicleInfoDao.selectOne(vehicleQuery); + if (vehicleInfo == null) { + return new Result().error("未找到车辆信息"); } + // 2. 检查预约人 boolean b2 = wechatUserDao.exists(new QueryWrapper() .ne("phone_number", " ") @@ -118,15 +118,26 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { if (!b3){ return new Result().error("该换电站未运营!"); } - //校验预约人是否有未支付的订单 - Long ordercount = orderSwapBatteryDao.selectCount(new QueryWrapper() - .eq("order_pre_uid", osbp.getUcode()) - .eq("status", 6) - .eq("order_pre_uname", osbp.getUname()) - ); - if (ordercount >= 3){ - return new Result().error("您有未支付的订单,请先支付!"); + //判断这个车是不是企业用车 + if (vehicleInfo.getOwnerType() != null && vehicleInfo.getOwnerType()==1 ){ + try { + Long unpaidOrderCount = orderSwapBatteryDao.selectCount(new LambdaQueryWrapper() + .eq(OrderSwapBattery::getOrderPreUid, osbp.getUcode()) + .eq(OrderSwapBattery::getStatus, 6) + .eq(OrderSwapBattery::getOrderPreUname, osbp.getUname()) + ); + + log.info("检查用户未支付订单,用户编码:{},未支付订单数:{}", osbp.getUcode(), unpaidOrderCount); + if (unpaidOrderCount >= 3) { + return new Result().error("您有3笔及以上未支付的订单,请先支付!"); + } + } catch (Exception e) { + log.error("检查未支付订单异常,用户编码:{},错误信息:{}", + osbp.getUcode(), e.getMessage()); + return new Result().error("系统异常,请稍后重试"); + } } + // 是否需要验证人和车绑定关系 // 是否需要验证公司和车的绑定关系 @@ -610,7 +621,7 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); List statusList = new ArrayList(); String strs= "1,2,3,4,5,6"; - if (StringUtils.hasText(strs)) {//订单状态”已完成“之前的状态 + if (StringUtils.hasText(strs)) {//订单状态"已完成"之前的状态 statusList = Arrays.asList(strs.split(",")).stream().map(Integer::valueOf).toList(); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderSwapBatteryTask.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderSwapBatteryTask.java index 604ddf5..d95fb1c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderSwapBatteryTask.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderSwapBatteryTask.java @@ -35,15 +35,18 @@ public class OrderSwapBatteryTask { private RedisUtil redisUtil; // @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 - @Scheduled(cron = "0 */2 * * * ?") + @Scheduled(cron = "0 */10 * * * ?") @Transactional(rollbackFor = Exception.class) public void orderSwapBatteryExpired() { log.info("\r\n===>>> 开始查找预约单更新预约状态.."); // 查询条件,只查询未处理的预约单 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq( OrderSwapBatteryPre::getStatus,1) - .le( OrderSwapBatteryPre::getReservationTime, new Date()) + Date date = new Date(); + //格式化 + String format = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"); + queryWrapper.eq( OrderSwapBatteryPre::getStatus,1) + .le( OrderSwapBatteryPre::getReservationTime, format) .select(OrderSwapBatteryPre::getPkId, OrderSwapBatteryPre::getSourceId, OrderSwapBatteryPre::getReservationTime, @@ -54,43 +57,45 @@ public class OrderSwapBatteryTask { List orderSwapBatteryPreList = orderSwapBatteryPreDao.selectList(queryWrapper); Date currentTime = new Date(); int expiredCount = 0; + if (CollectionUtil.isEmpty(orderSwapBatteryPreList)){ + for (OrderSwapBatteryPre order : orderSwapBatteryPreList) { + try { + // 1. 解析预约时间段 + String[] timeRange = order.getSwapDuration().split("-"); + if (timeRange.length != 2) { + log.error("预约时间段格式错误,订单ID: {}", order.getPkId()); + continue; + } - for (OrderSwapBatteryPre order : orderSwapBatteryPreList) { - try { - // 1. 解析预约时间段 - String[] timeRange = order.getSwapDuration().split("-"); - if (timeRange.length != 2) { - log.error("预约时间段格式错误,订单ID: {}", order.getPkId()); - continue; + // 2. 计算预约结束时间 + Date reservationDate = order.getReservationTime(); + String endTimeStr = timeRange[1].trim(); + Date endTime = DateUtil.parse(DateUtil.format(reservationDate, "yyyy-MM-dd") + " " + endTimeStr, + "yyyy-MM-dd HH:mm"); + + // 3. 添加30分钟缓冲期 + Date expireTime = DateUtil.offsetMinute(endTime, 30); + + // 4. 判断是否过期 + if (currentTime.after(expireTime)) { + order.setStatus(4); // 设置为过期状态 + orderSwapBatteryPreDao.updateById(order); + + // 发送公众号过期提醒 + // templateMessageService.preOrderMessageSend(order); + + expiredCount++; + log.info("预约单已过期,订单ID: {}, 预约时间: {}, 过期时间: {}", + order.getSourceId(), + DateUtil.format(order.getReservationTime(), "yyyy-MM-dd HH:mm:ss"), + DateUtil.format(expireTime, "yyyy-MM-dd HH:mm:ss")); + } + } catch (Exception e) { + log.error("处理预约单过期失败,预约人:{},订单ID: {}, 错误信息: {}", + order.getUname(), order.getPkId(), e.getMessage()); } - - // 2. 计算预约结束时间 - Date reservationDate = order.getReservationTime(); - String endTimeStr = timeRange[1].trim(); - Date endTime = DateUtil.parse(DateUtil.format(reservationDate, "yyyy-MM-dd") + " " + endTimeStr, - "yyyy-MM-dd HH:mm"); - - // 3. 添加30分钟缓冲期 - Date expireTime = DateUtil.offsetMinute(endTime, 30); - - // 4. 判断是否过期 - if (currentTime.after(expireTime)) { - order.setStatus(4); // 设置为过期状态 - orderSwapBatteryPreDao.updateById(order); - - // 发送公众号过期提醒 - // templateMessageService.preOrderMessageSend(order); - - expiredCount++; - log.info("预约单已过期,订单ID: {}, 预约时间: {}, 过期时间: {}", - order.getSourceId(), - DateUtil.format(order.getReservationTime(), "yyyy-MM-dd HH:mm:ss"), - DateUtil.format(expireTime, "yyyy-MM-dd HH:mm:ss")); - } - } catch (Exception e) { - log.error("处理预约单过期失败,预约人:{},订单ID: {}, 错误信息: {}", - order.getUname(), order.getPkId(), e.getMessage()); } + } log.info("\r\n===>>> 预约单过期:{} 条数据", expiredCount);