admin/config/prod/application-custom.yml
@@ -1,4 +1,11 @@ custom: rabbitmq: # 集群地址,用逗号分隔 host: 172.16.24.14 port: 5672 virtual-host: GF_HOST username: admin password: serialNumber: cache: enabled: true admin/config/test/application-custom.yml
@@ -1,4 +1,11 @@ custom: rabbitmq: # 集群地址,用逗号分隔 host: 61.143.42.70 port: 7008 virtual-host: GF_HOST_TEST username: user_test password: testuser_& serialNumber: cache: enabled: true admin/src/main/resources/application-custom.yml
@@ -57,6 +57,13 @@ login-password: admin123 filter: log-slow-sql: true # 慢SQL记录 rabbitmq: # 集群地址,用逗号分隔 host: 192.168.1.100 port: 5672 virtual-host: ccyf_dev username: admin password: admin@123 #redis 相关配置 redis: host: localhost #访问地址 admin/src/main/resources/application.yml
@@ -50,6 +50,14 @@ # Spring配置 spring: rabbitmq: # 集群地址,用逗号分隔 host: ${custom.rabbitmq.host} port: ${custom.rabbitmq.port} virtual-host: ${custom.rabbitmq.virtual-host} username: ${custom.rabbitmq.username} password: ${custom.rabbitmq.password} connection-timeout: 15000 # 资源信息 messages: # 国际化资源文件路径 framework/pom.xml
@@ -46,7 +46,10 @@ </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!-- 获取系统信息 --> <dependency> <groupId>com.github.oshi</groupId> framework/src/main/java/com/ruoyi/framework/config/RabbitMqConfig.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.framework.config; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitMqConfig { @Bean public RabbitTemplate rabbitTemplate( ConnectionFactory connectionFactory){ return new RabbitTemplate(connectionFactory); } } tms/pom.xml
@@ -25,6 +25,14 @@ <groupId>com.ruoyi</groupId> <artifactId>system</artifactId> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency> </dependencies> </project> tms/src/main/java/com/ruoyi/tms/config/TmsRabbitConfig.java
New file @@ -0,0 +1,50 @@ package com.ruoyi.tms.config; import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TmsRabbitConfig { // 延迟队列交换机 @Bean public DirectExchange delayExchange() { return new DirectExchange("car_key_delay_exchange"); } // 死信队列交换机 @Bean public DirectExchange deadExchange() { return new DirectExchange("car_key_dead_exchange"); } // 延迟队列 @Bean public Queue delayQueue() { return QueueBuilder.durable("car_key_delay_queue") .withArgument("x-dead-letter-exchange", "car_key_dead_exchange") .withArgument("x-dead-letter-routing-key", "car_key_dead_routing_key") .build(); } // 死信队列(实际消费队列) @Bean public Queue deadQueue() { return QueueBuilder.durable("car_key_dead_queue").build(); } // 延迟队列绑定 @Bean public Binding delayBinding() { return BindingBuilder.bind(delayQueue()).to(delayExchange()).with("car_key_delay"); } // 死信队列绑定 @Bean public Binding deadBinding() { return BindingBuilder.bind(deadQueue()).to(deadExchange()).with("car_key_dead_routing_key"); } } tms/src/main/java/com/ruoyi/tms/consumer/CarKeyExpireConsumer.java
New file @@ -0,0 +1,31 @@ package com.ruoyi.tms.consumer; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ruoyi.tms.domain.TmsCarKeyDispatch; import com.ruoyi.tms.mapper.TmsCarKeyDispatchMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import javax.annotation.Resource; @Slf4j @Component public class CarKeyExpireConsumer { @Resource private TmsCarKeyDispatchMapper tmsCarKeyDispatchMapper; @RabbitListener(queues = "car_key_dead_queue") public void handle(Integer carKeyId) { TmsCarKeyDispatch tmsCarKeyDispatch = tmsCarKeyDispatchMapper.selectTmsCarKeyDispatchById(carKeyId); if (tmsCarKeyDispatch != null && tmsCarKeyDispatch.getStatus() == 0){ log.info("超时领取钥匙:{}", carKeyId); tmsCarKeyDispatchMapper.update(new LambdaUpdateWrapper<TmsCarKeyDispatch>() .eq(TmsCarKeyDispatch::getId, carKeyId) .set(TmsCarKeyDispatch::getStatus, 2) ); } } } tms/src/main/java/com/ruoyi/tms/controller/TmsCarKeyDispatchController.java
New file @@ -0,0 +1,108 @@ package com.ruoyi.tms.controller; import java.util.List; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.utils.file.DownloadExportUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.tms.domain.TmsCarKeyDispatch; import com.ruoyi.tms.service.ITmsCarKeyDispatchService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; /** * 车钥匙分发记录Controller * * @author ruoyi * @date 2025-12-08 */ @RestController @RequestMapping("/tms/tmsCarKeyDispatch") public class TmsCarKeyDispatchController extends BaseController { @Autowired private ITmsCarKeyDispatchService tmsCarKeyDispatchService; /** * 查询车钥匙分发记录列表 */ @PreAuthorize("@ss.hasPermi('tms:tmsCarKeyDispatch:list')") @GetMapping("/list") public TableDataInfo list(TmsCarKeyDispatch tmsCarKeyDispatch) { startPage(); List<TmsCarKeyDispatch> list = tmsCarKeyDispatchService.selectTmsCarKeyDispatchList(tmsCarKeyDispatch); return getDataTable(list); } /** * 导出车钥匙分发记录列表 * @param tmsCarKeyDispatch 查询条件对象 */ @PreAuthorize("@ss.hasPermi('tms:tmsCarKeyDispatch:export')") @Log(title = "车钥匙分发记录", businessType = BusinessType.EXPORT) @GetMapping("/export") public AjaxResult export(TmsCarKeyDispatch tmsCarKeyDispatch,String exportKey) { tmsCarKeyDispatchService.export(tmsCarKeyDispatch,exportKey); return AjaxResult.success("导出请求成功,请稍后点击下载...!"); } /** * 获取车钥匙分发记录详细信息 */ @PreAuthorize("@ss.hasPermi('tms:tmsCarKeyDispatch:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Integer id) { return AjaxResult.success(tmsCarKeyDispatchService.selectTmsCarKeyDispatchById(id)); } /** * 新增车钥匙分发记录 */ @PreAuthorize("@ss.hasPermi('tms:tmsCarKeyDispatch:add')") @Log(title = "车钥匙分发记录", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody TmsCarKeyDispatch tmsCarKeyDispatch) { return toAjax(tmsCarKeyDispatchService.insertTmsCarKeyDispatch(tmsCarKeyDispatch)); } /** * 修改车钥匙分发记录 */ @PreAuthorize("@ss.hasPermi('tms:tmsCarKeyDispatch:edit')") @Log(title = "车钥匙分发记录", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody TmsCarKeyDispatch tmsCarKeyDispatch) { return toAjax(tmsCarKeyDispatchService.updateTmsCarKeyDispatch(tmsCarKeyDispatch)); } /** * 删除车钥匙分发记录 */ @PreAuthorize("@ss.hasPermi('tms:tmsCarKeyDispatch:remove')") @Log(title = "车钥匙分发记录", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Integer[] ids) { return toAjax(tmsCarKeyDispatchService.deleteTmsCarKeyDispatchByIds(ids)); } } tms/src/main/java/com/ruoyi/tms/domain/TmsCarKeyDispatch.java
New file @@ -0,0 +1,140 @@ package com.ruoyi.tms.domain; import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.annotation.Excel; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableField; import java.util.Date; import lombok.Data; /** * 车钥匙分发记录对象 tms_car_key_dispatch * * @author ruoyi * @date 2025-12-08 */ @Data public class TmsCarKeyDispatch { /** * id */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 调度单ID */ @Excel(name = "调度单ID") @TableField("dispatch_order_id") private Integer dispatchOrderId; /** * 调度单号 */ @Excel(name = "调度单号") @TableField("dispatch_order_no") private String dispatchOrderNo; /** * 司机id */ @Excel(name = "司机id") @TableField("driver_id") private Integer driverId; /** * 司机手机号 */ @Excel(name = "司机手机号") @TableField("driver_mobile") private String driverMobile; /** * 司机名称 */ @Excel(name = "司机名称") @TableField("driver_name") private String driverName; /** * 车辆id */ @Excel(name = "车辆id") @TableField("vehicle_id") private Integer vehicleId; /** * 车牌号 */ @Excel(name = "车牌号") @TableField("vehicle_license_plate") private String vehicleLicensePlate; /** * 车钥匙柜号 */ @Excel(name = "车钥匙柜号") @TableField("vehicle_car_key_no") private String vehicleCarKeyNo; /** * 领钥匙截止时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "领钥匙截止时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") @TableField("car_key_expiration_time") private Date carKeyExpirationTime; /** * 钥匙领取时间 */ @Excel(name = "钥匙领取时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("car_key_collection _time") private Date carKeyCollectionTime; /** * 创建时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("create_time") private Date createTime; /** * 更新时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("update_time") private Date updateTime; /** * 状态(0:待领取;1:已领取;2:已逾期;) */ @Excel(name = "状态(0:待领取;1:已领取;2:已逾期;)") @TableField("status") private Integer status; } tms/src/main/java/com/ruoyi/tms/mapper/TmsCarKeyDispatchMapper.java
New file @@ -0,0 +1,87 @@ package com.ruoyi.tms.mapper; import java.util.List; import com.ruoyi.tms.domain.TmsCarKeyDispatch; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * 车钥匙分发记录Mapper接口 * * @author ruoyi * @date 2025-12-08 */ public interface TmsCarKeyDispatchMapper extends BaseMapper<TmsCarKeyDispatch> { /** * 查询车钥匙分发记录 * * @param id 车钥匙分发记录ID * @return 车钥匙分发记录 */ public TmsCarKeyDispatch selectTmsCarKeyDispatchById(Integer id); /** * 查询车钥匙分发记录 记录数 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 车钥匙分发记录集合 */ public int selectTmsCarKeyDispatchCount(TmsCarKeyDispatch tmsCarKeyDispatch); /** * 查询车钥匙分发记录列表 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 车钥匙分发记录集合 */ public List<TmsCarKeyDispatch> selectTmsCarKeyDispatchList(TmsCarKeyDispatch tmsCarKeyDispatch); /** * 新增车钥匙分发记录 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 结果 */ public int insertTmsCarKeyDispatch(TmsCarKeyDispatch tmsCarKeyDispatch); /** * 新增车钥匙分发记录[批量] * * @param tmsCarKeyDispatchs 车钥匙分发记录 * @return 结果 */ public int insertTmsCarKeyDispatchBatch(List<TmsCarKeyDispatch> tmsCarKeyDispatchs); /** * 修改车钥匙分发记录 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 结果 */ public int updateTmsCarKeyDispatch(TmsCarKeyDispatch tmsCarKeyDispatch); /** * 修改车钥匙分发记录[批量] * * @param tmsCarKeyDispatchs 车钥匙分发记录 * @return 结果 */ public int updateTmsCarKeyDispatchBatch(List<TmsCarKeyDispatch> tmsCarKeyDispatchs); /** * 删除车钥匙分发记录 * * @param id 车钥匙分发记录ID * @return 结果 */ public int deleteTmsCarKeyDispatchById(Integer id); /** * 批量删除车钥匙分发记录 * * @param ids 需要删除的数据ID * @return 结果 */ public int deleteTmsCarKeyDispatchByIds(Integer[] ids); } tms/src/main/java/com/ruoyi/tms/service/ITmsCarKeyDispatchService.java
New file @@ -0,0 +1,102 @@ package com.ruoyi.tms.service; import java.util.List; import com.ruoyi.tms.domain.TmsCarKeyDispatch; import com.baomidou.mybatisplus.extension.service.IService; /** * 车钥匙分发记录Service接口 * * @author ruoyi * @date 2025-12-08 */ public interface ITmsCarKeyDispatchService extends IService<TmsCarKeyDispatch> { /** * 查询车钥匙分发记录 * * @param id 车钥匙分发记录ID * @return 车钥匙分发记录 */ public TmsCarKeyDispatch selectTmsCarKeyDispatchById(Integer id); /** * 查询车钥匙分发记录 记录数 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 车钥匙分发记录集合 */ public int selectTmsCarKeyDispatchCount(TmsCarKeyDispatch tmsCarKeyDispatch); /** * 查询车钥匙分发记录列表 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 车钥匙分发记录集合 */ public List<TmsCarKeyDispatch> selectTmsCarKeyDispatchList(TmsCarKeyDispatch tmsCarKeyDispatch); /** * 查询车钥匙分发记录列表 异步 导出 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @param exportKey 导出功能的唯一标识 * @return 车钥匙分发记录集合 */ public void export(TmsCarKeyDispatch tmsCarKeyDispatch, String exportKey) ; /** * 新增车钥匙分发记录 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 结果 */ public int insertTmsCarKeyDispatch(TmsCarKeyDispatch tmsCarKeyDispatch); /** * 新增车钥匙分发记录[批量] * * @param tmsCarKeyDispatchs 车钥匙分发记录 * @return 结果 */ public int insertTmsCarKeyDispatchBatch(List<TmsCarKeyDispatch> tmsCarKeyDispatchs); /** * 修改车钥匙分发记录 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 结果 */ public int updateTmsCarKeyDispatch(TmsCarKeyDispatch tmsCarKeyDispatch); /** * 修改车钥匙分发记录[批量] * * @param tmsCarKeyDispatchs 车钥匙分发记录 * @return 结果 */ public int updateTmsCarKeyDispatchBatch(List<TmsCarKeyDispatch> tmsCarKeyDispatchs); /** * 批量删除车钥匙分发记录 * * @param ids 需要删除的数据ID * @return 结果 */ public int deleteTmsCarKeyDispatchByIds(String ids); /** * 批量删除车钥匙分发记录 * * @param ids 需要删除的数据ID * @return 结果 */ public int deleteTmsCarKeyDispatchByIds(Integer[] ids); /** * 删除车钥匙分发记录信息 * * @param id 车钥匙分发记录ID * @return 结果 */ public int deleteTmsCarKeyDispatchById(Integer id); } tms/src/main/java/com/ruoyi/tms/service/impl/TmsCarKeyDispatchServiceImpl.java
New file @@ -0,0 +1,182 @@ package com.ruoyi.tms.service.impl; import java.util.List; import com.ruoyi.common.utils.DateUtils; import javax.annotation.Resource; import org.springframework.transaction.annotation.Transactional; import org.springframework.stereotype.Service; import org.springframework.scheduling.annotation.Async; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.core.service.BaseService; import com.ruoyi.tms.mapper.TmsCarKeyDispatchMapper; import com.ruoyi.tms.domain.TmsCarKeyDispatch; import com.ruoyi.tms.service.ITmsCarKeyDispatchService; import com.ruoyi.common.core.text.Convert; /** * 车钥匙分发记录Service业务层处理 * * @author ruoyi * @date 2025-12-08 */ @Service @Transactional(rollbackFor = Exception.class) public class TmsCarKeyDispatchServiceImpl extends BaseService<TmsCarKeyDispatchMapper, TmsCarKeyDispatch> implements ITmsCarKeyDispatchService { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private TmsCarKeyDispatchMapper tmsCarKeyDispatchMapper; /** * 查询车钥匙分发记录 * * @param id 车钥匙分发记录ID * @return 车钥匙分发记录 */ @DataSource(DataSourceType.SLAVE) @Override public TmsCarKeyDispatch selectTmsCarKeyDispatchById(Integer id) { return tmsCarKeyDispatchMapper.selectTmsCarKeyDispatchById(id); } /** * 查询车钥匙分发记录 记录数 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 车钥匙分发记录集合 */ @DataSource(DataSourceType.SLAVE) @Override public int selectTmsCarKeyDispatchCount(TmsCarKeyDispatch tmsCarKeyDispatch) { return tmsCarKeyDispatchMapper.selectTmsCarKeyDispatchCount(tmsCarKeyDispatch); } /** * 查询车钥匙分发记录列表 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 车钥匙分发记录 */ @DataSource(DataSourceType.SLAVE) @Override public List<TmsCarKeyDispatch> selectTmsCarKeyDispatchList(TmsCarKeyDispatch tmsCarKeyDispatch) { return tmsCarKeyDispatchMapper.selectTmsCarKeyDispatchList(tmsCarKeyDispatch); } /** * 查询车钥匙分发记录列表 异步 导出 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @param exportKey 导出功能的唯一标识 * @return 车钥匙分发记录集合 */ @DataSource(DataSourceType.SLAVE) @Async @Override public void export(TmsCarKeyDispatch tmsCarKeyDispatch,String exportKey) { super.export(TmsCarKeyDispatch.class,exportKey,"tmsCarKeyDispatchData",(pageNum)->{ PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); return selectTmsCarKeyDispatchList(tmsCarKeyDispatch); }); } /** * 新增车钥匙分发记录 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 结果 */ @Override public int insertTmsCarKeyDispatch(TmsCarKeyDispatch tmsCarKeyDispatch) { tmsCarKeyDispatch.setCreateTime(DateUtils.getNowDate()); return tmsCarKeyDispatchMapper.insertTmsCarKeyDispatch(tmsCarKeyDispatch); } /** * 新增车钥匙分发记录[批量] * * @param tmsCarKeyDispatchs 车钥匙分发记录 * @return 结果 */ @Override public int insertTmsCarKeyDispatchBatch(List<TmsCarKeyDispatch> tmsCarKeyDispatchs) { int rows = tmsCarKeyDispatchMapper.insertTmsCarKeyDispatchBatch(tmsCarKeyDispatchs); return rows; } /** * 修改车钥匙分发记录 * * @param tmsCarKeyDispatch 车钥匙分发记录 * @return 结果 */ @Override public int updateTmsCarKeyDispatch(TmsCarKeyDispatch tmsCarKeyDispatch) { tmsCarKeyDispatch.setUpdateTime(DateUtils.getNowDate()); return tmsCarKeyDispatchMapper.updateTmsCarKeyDispatch(tmsCarKeyDispatch); } /** * 修改车钥匙分发记录[批量] * * @param tmsCarKeyDispatchs 车钥匙分发记录 * @return 结果 */ @Override public int updateTmsCarKeyDispatchBatch(List<TmsCarKeyDispatch> tmsCarKeyDispatchs){ return tmsCarKeyDispatchMapper.updateTmsCarKeyDispatchBatch(tmsCarKeyDispatchs); } /** * 删除车钥匙分发记录对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteTmsCarKeyDispatchByIds(String ids) { return deleteTmsCarKeyDispatchByIds(Convert.toIntArray(ids)); } /** * 删除车钥匙分发记录对象 * * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteTmsCarKeyDispatchByIds(Integer[] ids) { return tmsCarKeyDispatchMapper.deleteTmsCarKeyDispatchByIds(ids); } /** * 删除车钥匙分发记录信息 * * @param id 车钥匙分发记录ID * @return 结果 */ @Override public int deleteTmsCarKeyDispatchById(Integer id) { return tmsCarKeyDispatchMapper.deleteTmsCarKeyDispatchById(id); } } tms/src/main/java/com/ruoyi/tms/service/impl/TmsTripServiceImpl.java
@@ -1,10 +1,9 @@ package com.ruoyi.tms.service.impl; import java.io.File; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -18,11 +17,10 @@ import com.ruoyi.common.utils.uuid.Seq; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.tms.domain.*; import com.ruoyi.tms.mapper.TmsDispatchOrderMapper; import com.ruoyi.tms.mapper.TmsDriverDispatchMapper; import com.ruoyi.tms.mapper.TmsDriverMapper; import com.ruoyi.tms.mapper.*; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; @@ -35,7 +33,6 @@ import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.core.service.BaseService; import com.ruoyi.tms.mapper.TmsTripMapper; import com.ruoyi.tms.service.ITmsTripService; import com.ruoyi.common.core.text.Convert; @@ -65,6 +62,10 @@ private TmsDriverMapper tmsDriverMapper; @Autowired private TmsVehicleServiceImpl tmsVehicleServiceImpl; @Resource private TmsCarKeyDispatchMapper tmsCarKeyDispatchMapper; @Autowired private RabbitTemplate rabbitTemplate; @Autowired private AsyncPdfService asyncPdfService; @@ -160,6 +161,7 @@ throw new RuntimeException("未找到司机数据"); } tmsDispatchOrder.setStatus(2); tmsDispatchOrderMapper.updateTmsDispatchOrder(tmsDispatchOrder); tmsTrip.setDriverName(tmsDispatchOrder.getMainDriverName()); @@ -171,8 +173,55 @@ if (StringUtils.isNotEmpty(tmsTrip.getSignImg())){ asyncPdfService.generateTripPdfAsync(tmsTrip,tmsDispatchOrder,tmsDriver); } // 完成身体检查 if (tmsTrip.getTripType() == 1){ // 添加 领钥匙 指令记录 TmsVehicle tmsVehicle = tmsVehicleServiceImpl.selectTmsVehicleById(tmsDispatchOrder.getVehicleId()); TmsCarKeyDispatch tmsCarKeyDispatch = new TmsCarKeyDispatch(); tmsCarKeyDispatch.setDispatchOrderId(dispatchOrderId); tmsCarKeyDispatch.setDispatchOrderNo(tmsDispatchOrder.getDispatchNo()); tmsCarKeyDispatch.setDriverId(tmsDriver.getId()); tmsCarKeyDispatch.setDriverMobile(tmsDriver.getMobile()); tmsCarKeyDispatch.setDriverName(tmsDriver.getDriverName()); tmsCarKeyDispatch.setVehicleId(tmsDispatchOrder.getVehicleId()); tmsCarKeyDispatch.setVehicleLicensePlate(tmsDispatchOrder.getLicensePlate()); tmsCarKeyDispatch.setVehicleCarKeyNo(tmsVehicle.getCarKeyNo()); LocalDateTime plus2Hours = LocalDateTime.now().plusHours(2); Date date = Date.from(plus2Hours.atZone(ZoneId.systemDefault()).toInstant()); tmsCarKeyDispatch.setCarKeyExpirationTime(date); tmsCarKeyDispatch.setStatus(0); tmsCarKeyDispatchMapper.insertTmsCarKeyDispatch(tmsCarKeyDispatch); sendCarKeyDelayMessage(tmsCarKeyDispatch.getId(), 2 * 60 * 60 * 1000L); } return 1; } /** * 发送延迟消息 * @param carKeyId car_key id * @param delayMillis 延迟毫秒数 */ public void sendCarKeyDelayMessage(Integer carKeyId, long delayMillis) { rabbitTemplate.convertAndSend( "car_key_delay_exchange", "car_key_delay", carKeyId, message -> { message.getMessageProperties().setExpiration(String.valueOf(delayMillis)); return message; } ); } @Override public AjaxResult submitDropHook(TmsTrip tmsTrip){ Integer dispatchOrderId = tmsTrip.getDispatchOrderId(); @@ -229,7 +278,7 @@ } TmsVehicle tmsVehicle = tmsVehicleServiceImpl.selectTmsVehicleById(driverDispatch.getDriverId()); TmsVehicle tmsVehicle = tmsVehicleServiceImpl.selectTmsVehicleById(driverDispatch.getVehicleId()); tmsDispatchOrderMapper.update( new LambdaUpdateWrapper<TmsDispatchOrder>() tms/src/main/resources/mapper/tms/TmsCarKeyDispatchMapper.xml
New file @@ -0,0 +1,169 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.tms.mapper.TmsCarKeyDispatchMapper"> <resultMap type="com.ruoyi.tms.domain.TmsCarKeyDispatch" id="TmsCarKeyDispatchResult"> <result property="id" column="id" /> <result property="dispatchOrderId" column="dispatch_order_id" /> <result property="dispatchOrderNo" column="dispatch_order_no" /> <result property="driverId" column="driver_id" /> <result property="driverMobile" column="driver_mobile" /> <result property="driverName" column="driver_name" /> <result property="vehicleId" column="vehicle_id" /> <result property="vehicleLicensePlate" column="vehicle_license_plate" /> <result property="vehicleCarKeyNo" column="vehicle_car_key_no" /> <result property="carKeyExpirationTime" column="car_key_expiration_time" /> <result property="carKeyCollectionTime" column="car_key_collection_time" /> <result property="createTime" column="create_time" /> <result property="updateTime" column="update_time" /> <result property="status" column="status" /> </resultMap> <sql id="selectTmsCarKeyDispatchVo"> select thisTab.id, thisTab.dispatch_order_id, thisTab.dispatch_order_no, thisTab.driver_id, thisTab.driver_mobile, thisTab.driver_name, thisTab.vehicle_id, thisTab.vehicle_license_plate, thisTab.vehicle_car_key_no, thisTab.car_key_expiration_time, thisTab.car_key_collection_time, thisTab.create_time, thisTab.update_time, thisTab.status from tms_car_key_dispatch AS thisTab </sql> <sql id="selectTmsCarKeyDispatchVoCount"> select count(0) from tms_car_key_dispatch as thisTab </sql> <sql id="whereCondition"> <if test="dispatchOrderId != null "> and thisTab.dispatch_order_id = #{dispatchOrderId}</if> <if test="dispatchOrderNo != null and dispatchOrderNo != ''"> and thisTab.dispatch_order_no = #{dispatchOrderNo}</if> <if test="driverId != null "> and thisTab.driver_id = #{driverId}</if> <if test="driverMobile != null and driverMobile != ''"> and thisTab.driver_mobile = #{driverMobile}</if> <if test="driverName != null and driverName != ''"> and thisTab.driver_name like concat('%', #{driverName}, '%')</if> <if test="vehicleId != null "> and thisTab.vehicle_id = #{vehicleId}</if> <if test="vehicleLicensePlate != null and vehicleLicensePlate != ''"> and thisTab.vehicle_license_plate = #{vehicleLicensePlate}</if> <if test="vehicleCarKeyNo != null "> and thisTab.vehicle_car_key_no = #{vehicleCarKeyNo}</if> <if test="carKeyExpirationTime != null "> and thisTab.car_key_expiration_time = #{carKeyExpirationTime}</if> <if test="carKeyCollectionTime != null "> and thisTab.car_key_collection_time = #{carKeyCollectionTime}</if> <if test="status != null "> and thisTab.status = #{status}</if> </sql> <!--查询--> <select id="selectTmsCarKeyDispatchById" parameterType="Integer" resultMap="TmsCarKeyDispatchResult"> <include refid="selectTmsCarKeyDispatchVo"/> where id = #{id} </select> <select id="selectTmsCarKeyDispatchCount" parameterType="com.ruoyi.tms.domain.TmsCarKeyDispatch" resultType="int"> <include refid="selectTmsCarKeyDispatchVoCount"/> <where> <include refid="whereCondition"/> </where> </select> <select id="selectTmsCarKeyDispatchList" parameterType="com.ruoyi.tms.domain.TmsCarKeyDispatch" resultMap="TmsCarKeyDispatchResult"> <include refid="selectTmsCarKeyDispatchVo"/> <where> <include refid="whereCondition"/> </where> order by thisTab.id desc </select> <!-- 新增 --> <insert id="insertTmsCarKeyDispatch" parameterType="com.ruoyi.tms.domain.TmsCarKeyDispatch" useGeneratedKeys="true" keyProperty="id"> insert into tms_car_key_dispatch <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null">id,</if> <if test="dispatchOrderId != null">dispatch_order_id,</if> <if test="dispatchOrderNo != null">dispatch_order_no,</if> <if test="driverId != null">driver_id,</if> <if test="driverMobile != null and driverMobile != ''">driver_mobile,</if> <if test="driverName != null">driver_name,</if> <if test="vehicleId != null">vehicle_id,</if> <if test="vehicleLicensePlate != null">vehicle_license_plate,</if> <if test="vehicleCarKeyNo != null">vehicle_car_key_no,</if> <if test="carKeyExpirationTime != null">car_key_expiration_time,</if> <if test="carKeyCollectionTime != null">car_key_collection_time,</if> <if test="createTime != null">create_time,</if> <if test="updateTime != null">update_time,</if> <if test="status != null">status,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null">#{id},</if> <if test="dispatchOrderId != null">#{dispatchOrderId},</if> <if test="dispatchOrderNo != null">#{dispatchOrderNo},</if> <if test="driverId != null">#{driverId},</if> <if test="driverMobile != null and driverMobile != ''">#{driverMobile},</if> <if test="driverName != null">#{driverName},</if> <if test="vehicleId != null">#{vehicleId},</if> <if test="vehicleLicensePlate != null">#{vehicleLicensePlate},</if> <if test="vehicleCarKeyNo != null">#{vehicleCarKeyNo},</if> <if test="carKeyExpirationTime != null">#{carKeyExpirationTime},</if> <if test="carKeyCollectionTime != null">#{carKeyCollectionTime},</if> <if test="createTime != null">#{createTime},</if> <if test="updateTime != null">#{updateTime},</if> <if test="status != null">#{status},</if> </trim> </insert> <insert id="insertTmsCarKeyDispatchBatch" parameterType="java.util.List" > insert into tms_car_key_dispatch <trim prefix="(" suffix=") values" suffixOverrides=","> id,dispatch_order_id,dispatch_order_no,driver_id,driver_mobile,driver_name,vehicle_id,vehicle_license_plate,vehicle_car_key_no,car_key_expiration_time,car_key_collection_time,create_time,update_time,status, </trim> <foreach item="item" index="index" collection="list" separator=","> <trim prefix="(" suffix=") " suffixOverrides=","> #{item.id},#{item.dispatchOrderId},#{item.dispatchOrderNo},#{item.driverId},#{item.driverMobile},#{item.driverName},#{item.vehicleId},#{item.vehicleLicensePlate},#{item.vehicleCarKeyNo},#{item.carKeyExpirationTime},#{item.carKeyCollectionTime},#{item.createTime},#{item.updateTime},#{item.status}, </trim> </foreach> </insert> <!-- 修改 --> <update id="updateTmsCarKeyDispatch" parameterType="com.ruoyi.tms.domain.TmsCarKeyDispatch"> update tms_car_key_dispatch <trim prefix="SET" suffixOverrides=","> <if test="dispatchOrderId != null">dispatch_order_id = #{dispatchOrderId},</if> <if test="dispatchOrderNo != null">dispatch_order_no = #{dispatchOrderNo},</if> <if test="driverId != null">driver_id = #{driverId},</if> <if test="driverMobile != null and driverMobile != ''">driver_mobile = #{driverMobile},</if> <if test="driverName != null">driver_name = #{driverName},</if> <if test="vehicleId != null">vehicle_id = #{vehicleId},</if> <if test="vehicleLicensePlate != null">vehicle_license_plate = #{vehicleLicensePlate},</if> <if test="vehicleCarKeyNo != null">vehicle_car_key_no = #{vehicleCarKeyNo},</if> <if test="carKeyExpirationTime != null">car_key_expiration_time = #{carKeyExpirationTime},</if> <if test="carKeyCollectionTime != null">car_key_collection_time = #{carKeyCollectionTime},</if> <if test="createTime != null">create_time = #{createTime},</if> <if test="updateTime != null">update_time = #{updateTime},</if> <if test="status != null">status = #{status},</if> </trim> where id = #{id} </update> <!-- 修改 --> <update id="updateTmsCarKeyDispatchBatch" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" separator=";"> update tms_car_key_dispatch <trim prefix="SET" suffixOverrides=","> <if test="item.dispatchOrderId != null">dispatch_order_id = #{item.dispatchOrderId},</if> <if test="item.dispatchOrderNo != null">dispatch_order_no = #{item.dispatchOrderNo},</if> <if test="item.driverId != null">driver_id = #{item.driverId},</if> <if test="item.driverMobile != null and item.driverMobile != ''">driver_mobile = #{item.driverMobile},</if> <if test="item.driverName != null">driver_name = #{item.driverName},</if> <if test="item.vehicleId != null">vehicle_id = #{item.vehicleId},</if> <if test="item.vehicleLicensePlate != null">vehicle_license_plate = #{item.vehicleLicensePlate},</if> <if test="item.vehicleCarKeyNo != null">vehicle_car_key_no = #{item.vehicleCarKeyNo},</if> <if test="item.carKeyExpirationTime != null">car_key_expiration_time = #{item.carKeyExpirationTime},</if> <if test="item.carKeyCollectionTime != null">car_key_collection_time = #{item.carKeyCollectionTime},</if> <if test="item.createTime != null">create_time = #{item.createTime},</if> <if test="item.updateTime != null">update_time = #{item.updateTime},</if> <if test="item.status != null">status = #{item.status},</if> </trim> where id = #{item.id} </foreach> </update> <!--删除--> <delete id="deleteTmsCarKeyDispatchById" parameterType="Integer"> delete from tms_car_key_dispatch where id = #{id} </delete> <delete id="deleteTmsCarKeyDispatchByIds" parameterType="Integer"> delete from tms_car_key_dispatch where id in <foreach item="id" collection="array" open="(" separator="," close=")"> #{id} </foreach> </delete> </mapper>