refactor(order): 优化订单相关逻辑和性能

- 重构了订单预览添加逻辑,增加了对车辆信息的查询和验证
- 改进了预约单过期处理任务,提高了查询效率和代码可读性
This commit is contained in:
tzy 2025-04-18 16:53:51 +08:00
parent 5f43f7510c
commit 1a68ba3e9e
2 changed files with 70 additions and 54 deletions

View File

@ -89,19 +89,19 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
private BatteryStationDao batteryStationDao; private BatteryStationDao batteryStationDao;
@Resource @Resource
private GZHTemplateMessageService gzhTemplateMessageService; private GZHTemplateMessageService gzhTemplateMessageService;
@Resource
private BatteryStationHdFeeStandardDao batteryStationHdFeeStandardDao;
@Override @Override
public Result<Integer> addPre(OrderSwapBatteryPre osbp) { public Result<Integer> addPre(OrderSwapBatteryPre osbp) {
// 1. 检查车辆 // 1. 检查车辆
boolean b1 = vehicleInfoDao.exists(new QueryWrapper<VehicleInfo>() LambdaQueryWrapper<VehicleInfo> vehicleQuery = new LambdaQueryWrapper<VehicleInfo>()
.eq("del_flag", 0) .eq(VehicleInfo::getPlateNum, osbp.getPlateNum())
.eq("plate_num", osbp.getPlateNum())); .select(VehicleInfo::getOwnerType);
if (!b1) {
return new Result<Integer>().error("车辆未注册!"); VehicleInfo vehicleInfo = vehicleInfoDao.selectOne(vehicleQuery);
if (vehicleInfo == null) {
return new Result<Integer>().error("未找到车辆信息");
} }
// 2. 检查预约人 // 2. 检查预约人
boolean b2 = wechatUserDao.exists(new QueryWrapper<WechatUser>() boolean b2 = wechatUserDao.exists(new QueryWrapper<WechatUser>()
.ne("phone_number", " ") .ne("phone_number", " ")
@ -118,15 +118,26 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
if (!b3){ if (!b3){
return new Result<Integer>().error("该换电站未运营!"); return new Result<Integer>().error("该换电站未运营!");
} }
//校验预约人是否有未支付的订单 //判断这个车是不是企业用车
Long ordercount = orderSwapBatteryDao.selectCount(new QueryWrapper<OrderSwapBattery>() if (vehicleInfo.getOwnerType() != null && vehicleInfo.getOwnerType()==1 ){
.eq("order_pre_uid", osbp.getUcode()) try {
.eq("status", 6) Long unpaidOrderCount = orderSwapBatteryDao.selectCount(new LambdaQueryWrapper<OrderSwapBattery>()
.eq("order_pre_uname", osbp.getUname()) .eq(OrderSwapBattery::getOrderPreUid, osbp.getUcode())
.eq(OrderSwapBattery::getStatus, 6)
.eq(OrderSwapBattery::getOrderPreUname, osbp.getUname())
); );
if (ordercount >= 3){
return new Result<Integer>().error("您有未支付的订单,请先支付!"); log.info("检查用户未支付订单,用户编码:{},未支付订单数:{}", osbp.getUcode(), unpaidOrderCount);
if (unpaidOrderCount >= 3) {
return new Result<Integer>().error("您有3笔及以上未支付的订单请先支付");
} }
} catch (Exception e) {
log.error("检查未支付订单异常,用户编码:{},错误信息:{}",
osbp.getUcode(), e.getMessage());
return new Result<Integer>().error("系统异常,请稍后重试");
}
}
// 是否需要验证人和车绑定关系 // 是否需要验证人和车绑定关系
// 是否需要验证公司和车的绑定关系 // 是否需要验证公司和车的绑定关系
@ -610,7 +621,7 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
Page<OrderSwapBattery> page = new Page<OrderSwapBattery>(plsor.getPageNo(), plsor.getPageSize()); Page<OrderSwapBattery> page = new Page<OrderSwapBattery>(plsor.getPageNo(), plsor.getPageSize());
List<Integer> statusList = new ArrayList<Integer>(); List<Integer> statusList = new ArrayList<Integer>();
String strs= "1,2,3,4,5,6"; 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(); statusList = Arrays.asList(strs.split(",")).stream().map(Integer::valueOf).toList();
} }

View File

@ -35,15 +35,18 @@ public class OrderSwapBatteryTask {
private RedisUtil redisUtil; private RedisUtil redisUtil;
// @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 // @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次
@Scheduled(cron = "0 */2 * * * ?") @Scheduled(cron = "0 */10 * * * ?")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void orderSwapBatteryExpired() { public void orderSwapBatteryExpired() {
log.info("\r\n===>>> 开始查找预约单更新预约状态.."); log.info("\r\n===>>> 开始查找预约单更新预约状态..");
// 查询条件只查询未处理的预约单 // 查询条件只查询未处理的预约单
LambdaQueryWrapper<OrderSwapBatteryPre> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<OrderSwapBatteryPre> queryWrapper = new LambdaQueryWrapper<>();
Date date = new Date();
//格式化
String format = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss");
queryWrapper.eq( OrderSwapBatteryPre::getStatus,1) queryWrapper.eq( OrderSwapBatteryPre::getStatus,1)
.le( OrderSwapBatteryPre::getReservationTime, new Date()) .le( OrderSwapBatteryPre::getReservationTime, format)
.select(OrderSwapBatteryPre::getPkId, .select(OrderSwapBatteryPre::getPkId,
OrderSwapBatteryPre::getSourceId, OrderSwapBatteryPre::getSourceId,
OrderSwapBatteryPre::getReservationTime, OrderSwapBatteryPre::getReservationTime,
@ -54,7 +57,7 @@ public class OrderSwapBatteryTask {
List<OrderSwapBatteryPre> orderSwapBatteryPreList = orderSwapBatteryPreDao.selectList(queryWrapper); List<OrderSwapBatteryPre> orderSwapBatteryPreList = orderSwapBatteryPreDao.selectList(queryWrapper);
Date currentTime = new Date(); Date currentTime = new Date();
int expiredCount = 0; int expiredCount = 0;
if (CollectionUtil.isEmpty(orderSwapBatteryPreList)){
for (OrderSwapBatteryPre order : orderSwapBatteryPreList) { for (OrderSwapBatteryPre order : orderSwapBatteryPreList) {
try { try {
// 1. 解析预约时间段 // 1. 解析预约时间段
@ -93,6 +96,8 @@ public class OrderSwapBatteryTask {
} }
} }
}
log.info("\r\n===>>> 预约单过期:{} 条数据", expiredCount); log.info("\r\n===>>> 预约单过期:{} 条数据", expiredCount);
} }