package com.yc.qunxing.web;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yc.qunxing.clients.DriverAction;
import com.yc.qunxing.clients.UserAction;
import com.yc.qunxing.entity.*;
import com.yc.qunxing.entity.vo.OrderDetails;
import com.yc.qunxing.entity.vo.OrderDetailsDriver;
import com.yc.qunxing.entity.vo.RouteFrequency;
import com.yc.qunxing.result.Result;
import com.yc.qunxing.service.IDriversService;
import com.yc.qunxing.service.IOrdersService;
import com.yc.qunxing.service.IUserRatingsService;
import com.yc.qunxing.service.IUsersService;
import com.yc.qunxing.websocket.WebSocketServer;
import com.yc.qunxing.websocket.WebSocketServerDriver;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* <p>
* 前端控制器
* </p>
*
* @author 鹏哥
* @since 2024-05-23
*/
@RestController
@RequestMapping("/orders")
public class OrderController {
@Autowired
public IOrdersService iOrdersService;
@Autowired
private WebSocketServer webSocketServer;
@Autowired
private UserAction userAction;
@Autowired
private DriverAction driverAction;
@Autowired
private IDriversService iDriversService;
@Autowired
private IUsersService iUsersService;
@Autowired
private WebSocketServerDriver webSocketServerDriver;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
IUserRatingsService iUserRatingsService;
@Autowired
private RedisTemplate redisTemplate;
@PostMapping("/callDriver")
public Result<Integer> CallDriver(@RequestBody Orders orders){
orders.setOrderDate(LocalDateTime.now());
/* System.out.println(orders+"0000");*/
Integer orderId= iOrdersService.addOrder(orders);
Result<Users> usersResult = userAction.GetById(orders.getUserId());
String phoneNumber = usersResult.getData().getPhoneNumber();
//////////////////////////////////////////////
Map map = new HashMap();
map.put("type", 1);//消息类型,1表示来单提醒
map.put("orderId", orders.getOrderId());
map.put("departureLocation", orders.getDepartureLocation());
map.put("destinationLocation",orders.getDestinationLocation());
map.put("startTime",orders.getOrderDate());
map.put("distance",orders.getDistance());
map.put("estimatedTime",orders.getDuration());
map.put("uuserId",orders.getUserId());
map.put("phoneNumber",phoneNumber);
// 通过 RabbitMQ 发布订单消息
rabbitTemplate.convertAndSend("orderQueue", map);
System.out.println(orders+"orders543");
//通过WebSocket实现来单提醒,向客户端浏览器推送消息
/* webSocketServer.sendToAllClient(JSON.toJSONString(map));*/
webSocketServer.sendToActiveDrivers(orders.getType(), orders.getColor(),orders.getDepartureLocation(),JSON.toJSONString(map));
///////////////////////////////////////////////////
clearOrderByManagerCache();
return Result.success(orderId);
}
/* // 取消订单接口
@PostMapping("/cancelOrder")
public Result<String> CancelOrder(@RequestParam("orderId") Integer orderId){
// 根据订单ID查询订单信息
Orders order = iOrdersService.getById(orderId);
if(order == null){
return Result.error("订单不存在");
}
// 更新订单状态为取消
order.setStatus("4");
iOrdersService.updateById(order);
return Result.success("订单取消成功");
}
@PutMapping("/acceptOrder")
public Result<String> AcceptOrder(@RequestBody Orders orders){
String key = "order_lock:" + orders.getOrderId();
Boolean success = redisTemplate.opsForValue().setIfAbsent(key, orders.getDriverId().toString());
if (Boolean.TRUE.equals(success)) {
orders.setStatus("2");
Drivers driver1=new Drivers();
driver1.setId(orders.getDriverId());
driver1.setStatus("2");
Result<String> stringResult = driverAction.UpdateDriverStatus(driver1);
System.out.println(stringResult+"980");
boolean b = iOrdersService.updateById(orders);
Result<Drivers> driversResult = driverAction.GetById(orders.getDriverId());
Result<DriverVehicles> driverVehiclesResult = driverAction.GetVerById(orders.getDriverId());
*//* System.out.println(b+"*88888888");*//*
//////////////////////////////////////////////
Map map = new HashMap();
map.put("type", 2);//消息类型,1表示来单提醒
map.put("orderId", orders.getOrderId());
map.put("phoneNumber",driversResult.getData().getPhoneNumber());
map.put("licensePlate",driversResult.getData().getLicensePlate());
map.put("vehicleType",driverVehiclesResult.getData().getVehicleType());
map.put("color",driverVehiclesResult.getData().getColor());
map.put("driverName",driversResult.getData().getUsername());
//通过WebSocket实现来单提醒,向客户端浏览器推送消息
webSocketServer.sendToUsers(JSON.toJSONString(map));
///////////////////////////////////////////////////
if(b){
return Result.success("接单成功");
}
return Result.error("接单失败");
} else {
return Result.error("订单已被其他司机抢到");
}
}*/
@PutMapping("/acceptOrder")
public Result<String> AcceptOrder(@RequestBody Orders orders) {
Map<String, Object> map = new HashMap<>();
map.put("type", 2); // 消息类型,2表示接单提醒
map.put("orderId", orders.getOrderId());
map.put("driverId", orders.getDriverId());
// 通过 RabbitMQ 发布接单消息
rabbitTemplate.convertAndSend("orderQueue", map);
return Result.success("接单请求已发送");
}
@PostMapping("/cancelOrder")
public Result<String> CancelOrder(@RequestParam("orderId") Integer orderId) {
Map<String, Object> map = new HashMap<>();
map.put("type", 3); // 消息类型,3表示取消订单
map.put("orderId", orderId);
// 通过 RabbitMQ 发布取消订单消息
rabbitTemplate.convertAndSend("orderQueue", map);
return Result.success("取消订单请求已发送");
}
@GetMapping("/getOrderStatus")
public Result<String> GetOrderStatus(@RequestParam Integer orderId){
Orders byId1 = iOrdersService.getById(orderId);
if(byId1.getStatus().equals("4")){
return Result.error("该用户已取消订单......");
}
return Result.success();
}
@PostMapping("insertDT")
public Result<String> InsertDT(@RequestBody Orders order){
iOrdersService.updateById(order);
return Result.success();
}
@GetMapping("getT")
public Result<String> GetT(@RequestParam Integer orderId){
Orders byId = iOrdersService.getById(orderId);
String durationDriver = byId.getDurationDriver();
return Result.success(durationDriver);
}
@GetMapping("getT1")
public Result<String> GetT1(@RequestParam Integer orderId){
Orders byId = iOrdersService.getById(orderId);
String duration = byId.getDuration();
return Result.success(duration);
}
@GetMapping("getListSE")
public Result<?> GetListSE(@RequestParam("userId") Integer userId) {
List<RouteFrequency> routeFrequencies = iOrdersService.getRouteFrequenciesByUserId(userId);
if (!routeFrequencies.isEmpty()) {
return Result.success(routeFrequencies);
} else {
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本项目是一款基于Java技术实现的群星网约车平台设计源码,包含325个文件,主要包括303个XML配置文件、6个YAML配置文件、6个Java源代码文件、3个属性配置文件,以及少量其他相关文件,如Git忽略文件、JAR包和IML项目文件等。该平台旨在提供高效的网约车服务解决方案。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java的群星网约车平台设计源码 (1638个子文件)
OrdersServiceImpl.class 15KB
Orders.class 10KB
UsersServiceImpl.class 9KB
Users.class 8KB
Drivers.class 7KB
HttpClientUtil.class 6KB
AliOssUtil.class 6KB
Admins.class 6KB
DriversServiceImpl.class 5KB
AppJwtUtil.class 5KB
OrderDetails.class 5KB
UserCoupons.class 4KB
AlipayTradePagePay.class 4KB
Result.class 4KB
AlipayTradePrecreate.class 4KB
DriverLocations.class 4KB
UserRatings.class 4KB
OrderDetailsDriver.class 3KB
CreateVerificationCodeImageUtil.class 3KB
DriverVehicles.class 3KB
Config.class 3KB
OrdersMapper.class 3KB
UserRatingsServiceImpl.class 3KB
RouteFrequency.class 3KB
UserCouponsServiceImpl.class 3KB
QrCodeUtils.class 2KB
DriversMapper.class 2KB
JwtUtil.class 2KB
PageResult.class 2KB
CreateVerificationCodeUtil.class 2KB
Order.class 2KB
IOrdersService.class 2KB
CreateVerificationCodeUtil$SecurityCodeLevel.class 1KB
DriverLocationsServiceImpl.class 1KB
IDriversService.class 983B
IUsersService.class 982B
BaseContext.class 916B
DriverVehiclesServiceImpl.class 750B
AdminsServiceImpl.class 694B
AliOssProperties.class 688B
UsersMapper.class 680B
IUserCouponsService.class 580B
JwtProperties.class 567B
DriverLocationsMapper.class 564B
DriverLocationsController.class 550B
DriverVehiclesController.class 546B
UserCouponsController.class 534B
UserRatingsController.class 534B
IUserRatingsService.class 525B
DriversController.class 517B
AdminsController.class 513B
OrdersController.class 513B
UsersController.class 509B
BaseException.class 465B
OrderBusinessException.class 423B
IDriverLocationsService.class 418B
IDriverVehiclesService.class 341B
DriverVehiclesMapper.class 328B
UserCouponsMapper.class 319B
UserRatingsMapper.class 319B
IAdminsService.class 317B
AdminsMapper.class 304B
mvnw.cmd 7KB
index.css 227KB
index.css 227KB
cascader.css 29KB
cascader.css 29KB
date-picker.css 28KB
date-picker.css 28KB
transfer.css 27KB
transfer.css 27KB
col.css 25KB
col.css 25KB
pagination.css 23KB
pagination.css 23KB
table.css 22KB
table.css 22KB
message-box.css 21KB
message-box.css 21KB
time-picker.css 21KB
time-picker.css 21KB
select.css 18KB
select.css 18KB
slider.css 18KB
slider.css 18KB
tabs.css 16KB
tabs.css 16KB
base.css 16KB
base.css 16KB
dropdown.css 15KB
dropdown.css 15KB
time-select.css 13KB
time-select.css 13KB
table-column.css 13KB
table-column.css 13KB
cascader-panel.css 13KB
cascader-panel.css 13KB
tree.css 13KB
tree.css 13KB
upload.css 12KB
共 1638 条
- 1
- 2
- 3
- 4
- 5
- 6
- 17
资源评论
lly202406
- 粉丝: 2284
- 资源: 5387
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功