refactor(order): 优化订单相关逻辑和性能
- 重构了订单预览添加逻辑,增加了对车辆信息的查询和验证 - 改进了预约单过期处理任务,提高了查询效率和代码可读性
This commit is contained in:
parent
5f43f7510c
commit
1a68ba3e9e
@ -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)
|
||||||
if (ordercount >= 3){
|
.eq(OrderSwapBattery::getOrderPreUname, osbp.getUname())
|
||||||
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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<>();
|
||||||
queryWrapper.eq( OrderSwapBatteryPre::getStatus,1)
|
Date date = new Date();
|
||||||
.le( OrderSwapBatteryPre::getReservationTime, 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,
|
.select(OrderSwapBatteryPre::getPkId,
|
||||||
OrderSwapBatteryPre::getSourceId,
|
OrderSwapBatteryPre::getSourceId,
|
||||||
OrderSwapBatteryPre::getReservationTime,
|
OrderSwapBatteryPre::getReservationTime,
|
||||||
@ -54,43 +57,45 @@ 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) {
|
||||||
|
try {
|
||||||
|
// 1. 解析预约时间段
|
||||||
|
String[] timeRange = order.getSwapDuration().split("-");
|
||||||
|
if (timeRange.length != 2) {
|
||||||
|
log.error("预约时间段格式错误,订单ID: {}", order.getPkId());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
for (OrderSwapBatteryPre order : orderSwapBatteryPreList) {
|
// 2. 计算预约结束时间
|
||||||
try {
|
Date reservationDate = order.getReservationTime();
|
||||||
// 1. 解析预约时间段
|
String endTimeStr = timeRange[1].trim();
|
||||||
String[] timeRange = order.getSwapDuration().split("-");
|
Date endTime = DateUtil.parse(DateUtil.format(reservationDate, "yyyy-MM-dd") + " " + endTimeStr,
|
||||||
if (timeRange.length != 2) {
|
"yyyy-MM-dd HH:mm");
|
||||||
log.error("预约时间段格式错误,订单ID: {}", order.getPkId());
|
|
||||||
continue;
|
// 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);
|
log.info("\r\n===>>> 预约单过期:{} 条数据", expiredCount);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user