订单定时任务优化

master
luojian 2025-01-07 10:28:45 +08:00
parent 8d2b0ea864
commit 5e9e830180
11 changed files with 95 additions and 16 deletions

View File

@ -23,8 +23,7 @@ public class BizDriverStateController {
*
*/
@GetMapping("/list")
public AjaxResult list()
{
public AjaxResult list() {
return AjaxResult.success(bizDriverStateService.selectDriverLocation());
}
@ -34,8 +33,7 @@ public class BizDriverStateController {
@GetMapping("/track")
public AjaxResult list(@RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime,
@RequestParam Long driverId)
{
@RequestParam Long driverId) {
String tableName = "track_driver_" + driverId;
return AjaxResult.success(bizDriverStateService.selectDriverTrack(startTime, endTime, tableName));
}
@ -45,8 +43,7 @@ public class BizDriverStateController {
*/
@PostMapping("/add")
@Transactional
public AjaxResult add(@RequestBody BizDriverState bizDriverState)
{
public AjaxResult add(@RequestBody BizDriverState bizDriverState) {
// 同步新增到司机对应的轨迹表中
bizDriverStateService.insertDriveDriveState(bizDriverState);
bizDriverState.setId(null);

View File

@ -2,6 +2,8 @@ package com.cpxt.biz.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
@ -31,6 +33,15 @@ public class BizCarState
@Excel(name = "车牌号")
private String carNo;
@TableField(exist = false)
private String orderSn;
@TableField(exist = false)
private String driverName;
@TableField(exist = false)
private String copilotName;
/** 定位设备ID */
@Excel(name = "定位设备ID")
private String vin;

View File

@ -34,6 +34,12 @@ public class BizDriverState implements Serializable {
*/
private String driverName;
@TableField(exist = false)
private String orderSn;
@TableField(exist = false)
private String carNo;
/**
* ID
*/

View File

@ -107,4 +107,10 @@ public class BizOrderTask
/** 更新者 */
private String updateBy;
private Integer execMode;
private String execTimes;
private String orderDateMode;
}

View File

@ -20,7 +20,7 @@ public interface BizDriverStateMapper extends BaseMapper<BizDriverState> {
int insertBizDriverState(BizDriverState bizDriverState);
Map selectDriverTrack(@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("tableName") String tableName);
List<Map> selectDriverTrack(@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("tableName") String tableName);
@Select("SELECT * FROM biz_driver_state WHERE id in (SELECT t.id FROM (SELECT id,MAX(gps_time) FROM biz_driver_state GROUP BY driver_id) t)")
List<BizDriverState> selectDriverLocation();

View File

@ -15,7 +15,7 @@ public interface BizDriverStateService extends IService<BizDriverState> {
public int insertDriveDriveState(BizDriverState bizDriverState);
Map selectDriverTrack(String startTime, String endTime, String tableName);
List<Map> selectDriverTrack(String startTime, String endTime, String tableName);
List<BizDriverState> selectDriverLocation();

View File

@ -1,13 +1,16 @@
package com.cpxt.biz.service.impl;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cpxt.biz.domain.BizCarState;
import com.cpxt.biz.domain.BizOrder;
import com.cpxt.biz.mapper.BizCarStateMapper;
import com.cpxt.biz.mapper.BizOrderMapper;
import com.cpxt.biz.service.IBizCarStateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -24,6 +27,9 @@ public class BizCarStateServiceImpl implements IBizCarStateService
@Autowired
private BizCarStateMapper bizCarStateMapper;
@Autowired
private BizOrderMapper bizOrderMapper;
/**
*
*
@ -72,7 +78,24 @@ public class BizCarStateServiceImpl implements IBizCarStateService
public List<BizCarState> selectBizCarStateList(BizCarState bizCarState)
{
LambdaQueryWrapper<BizCarState> queryWrapper = buildQueryWrapper(bizCarState);
return bizCarStateMapper.selectList(queryWrapper);
List<BizCarState> bizCarStateList = bizCarStateMapper.selectList(queryWrapper);
for (BizCarState carState : bizCarStateList) {
Date gpsTime = carState.getGpsTime();
String carNo = carState.getCarNo();
LambdaQueryWrapper<BizOrder> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(BizOrder::getCarNo,carNo);
queryWrapper1.in(BizOrder::getOrderStatus,"1","2");
queryWrapper1.le(BizOrder::getUpdateTime,gpsTime);
queryWrapper1.orderByDesc(BizOrder::getUpdateTime);
queryWrapper1.last("limit 1");
BizOrder bizOrder = bizOrderMapper.selectOne(queryWrapper1);
if (bizOrder != null){
carState.setOrderSn(bizOrder.getOrderSn());
carState.setDriverName(bizOrder.getDriverName());
carState.setCopilotName(bizOrder.getCopilotName());
}
}
return bizCarStateList;
}
/**

View File

@ -1,12 +1,16 @@
package com.cpxt.biz.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cpxt.biz.domain.BizDriverState;
import com.cpxt.biz.domain.BizOrder;
import com.cpxt.biz.mapper.BizDriverStateMapper;
import com.cpxt.biz.mapper.BizOrderMapper;
import com.cpxt.biz.service.BizDriverStateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -22,19 +26,38 @@ public class BizDriverStateServiceImpl extends ServiceImpl<BizDriverStateMapper,
@Autowired
private BizDriverStateMapper bizDriverStateMapper;
@Autowired
private BizOrderMapper bizOrderMapper;
@Override
public int insertDriveDriveState(BizDriverState bizDriverState) {
return bizDriverStateMapper.insertBizDriverState(bizDriverState);
}
@Override
public Map selectDriverTrack(String startTime, String endTime, String tableName) {
public List<Map> selectDriverTrack(String startTime, String endTime, String tableName) {
return bizDriverStateMapper.selectDriverTrack(startTime,endTime,tableName);
}
@Override
public List<BizDriverState> selectDriverLocation() {
return bizDriverStateMapper.selectDriverLocation();
List<BizDriverState> bizDriverStateList = bizDriverStateMapper.selectDriverLocation();
for (BizDriverState bizDriverState : bizDriverStateList) {
Integer driverId = bizDriverState.getDriverId();
Date gpsTime = bizDriverState.getGpsTime();
LambdaQueryWrapper<BizOrder> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(BizOrder::getDriverId,driverId);
queryWrapper1.in(BizOrder::getOrderStatus,"1","2");
queryWrapper1.le(BizOrder::getUpdateTime,gpsTime);
queryWrapper1.orderByDesc(BizOrder::getUpdateTime);
queryWrapper1.last("limit 1");
BizOrder bizOrder = bizOrderMapper.selectOne(queryWrapper1);
if (bizOrder != null){
bizDriverState.setOrderSn(bizOrder.getOrderSn());
bizDriverState.setCarNo(bizOrder.getCarNo());
}
}
return bizDriverStateList;
}
}

View File

@ -185,10 +185,10 @@ public class BizOrderServiceImpl implements IBizOrderService {
queryWrapper.like(BizOrder::getCopilotName, bizOrder.getCopilotName());
}
if (ObjectUtil.isNotEmpty(bizOrder.getSenderName())) {
queryWrapper.and(wq -> wq.like(BizOrder::getSenderName, bizOrder.getSenderName()).or().like(BizOrder::getSenderPhone,bizOrder.getSenderName()).or().like(BizOrder::getSenderAddress,bizOrder.getSenderName()));
queryWrapper.and(wq -> wq.like(BizOrder::getSenderName, bizOrder.getSenderName()).or().like(BizOrder::getSenderPhone,bizOrder.getSenderName()).or().like(BizOrder::getSenderAddress,bizOrder.getSenderName()).or().like(BizOrder::getSenderLinkman,bizOrder.getSenderName()));
}
if (ObjectUtil.isNotEmpty(bizOrder.getReceiverName())) {
queryWrapper.and(wq -> wq.like(BizOrder::getReceiverName, bizOrder.getReceiverName()).or().like(BizOrder::getReceiverPhone,bizOrder.getReceiverName()).or().like(BizOrder::getReceiverAddress,bizOrder.getReceiverName()));
queryWrapper.and(wq -> wq.like(BizOrder::getReceiverName, bizOrder.getReceiverName()).or().like(BizOrder::getReceiverPhone,bizOrder.getReceiverName()).or().like(BizOrder::getReceiverAddress,bizOrder.getReceiverName()).or().like(BizOrder::getReceiverLinkman,bizOrder.getReceiverName()));
}
if (ObjectUtil.isNotEmpty(bizOrder.getReceiverLinkman())) {
queryWrapper.like(BizOrder::getReceiverLinkman, bizOrder.getReceiverLinkman());

View File

@ -71,6 +71,12 @@ public class BizOrderTaskServiceImpl implements IBizOrderTaskService
{
String uuid = UUID.randomUUID().toString();
// 根据execTimes构建cron表达式
String execTimes = bizOrderTask.getExecTimes(); // 16:24:30
String[] split = execTimes.split(":");
String cron = split[2] + " " + split[1] + " " + split[0] + " * * ?";
bizOrderTask.setCronExpression(cron);
SysJob sysJob = new SysJob();
sysJob.setJobName(bizOrderTask.getName());
sysJob.setInvokeTarget("orderTask.generateOrder('" + uuid +"')");
@ -87,6 +93,7 @@ public class BizOrderTaskServiceImpl implements IBizOrderTaskService
bizOrderTask.setCode(uuid);
bizOrderTask.setJobId(sysJob.getJobId());
return bizOrderTaskMapper.insert(bizOrderTask);
}
@ -100,6 +107,12 @@ public class BizOrderTaskServiceImpl implements IBizOrderTaskService
@Transactional
public int updateBizOrderTask(BizOrderTask bizOrderTask)
{
// 根据execTimes构建cron表达式
String execTimes = bizOrderTask.getExecTimes(); // 16:24:30
String[] split = execTimes.split(":");
String cron = split[2] + " " + split[1] + " " + split[0] + " * * ?";
bizOrderTask.setCronExpression(cron);
// 同步修改订单任务
SysJob sysJob = sysJobMapper.selectJobById(bizOrderTask.getJobId());
sysJob.setJobName(bizOrderTask.getName());

View File

@ -72,7 +72,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where>
1=1
<if test="null != startTime and startTime != ''">
and gps_time &gt;= #{createTime}
and gps_time &gt;= #{startTime}
</if>
<if test="null != endTime and endTime != ''">
and gps_time &lt;= #{endTime}