乘客下单基础功能
保存完订单数据就完事了吗?肯定不是的,因为还要启动任务调度,搜索附近可接单的代驾司机,这一过程相对复杂与繁琐,后续会逐渐完善,先完成一个简单的下单过程。
下单接口
@Data
@Schema(description = "订单实体")
public class OrderInfoForm {
@Schema(description = "客户ID")
private Long customerId;
@Schema(description = "订单号")
private String orderNo;
@Schema(description = "起始地点")
private String startLocation;
@Schema(description = "起始地点经度")
private BigDecimal startPointLongitude;
@Schema(description = "起始点伟度")
private BigDecimal startPointLatitude;
@Schema(description = "结束地点")
private String endLocation;
@Schema(description = "结束地点经度")
private BigDecimal endPointLongitude;
@Schema(description = "结束地点经度")
private BigDecimal endPointLatitude;
@Schema(description = "顾客好处费")
private BigDecimal favourFee;
@Schema(description = "订单备注信息")
private String remark;
//预期费用信息
@Schema(description = "预估订单费用")
private BigDecimal expectAmount;
@Schema(description = "预估里程")
private BigDecimal expectDistance;
}
@Tag(name = "订单API接口管理")
@RestController
@RequestMapping(value="/order/info")
@SuppressWarnings({"unchecked", "rawtypes"})
public class OrderInfoController {
@Autowired
private OrderInfoService orderInfoService;
@Operation(summary = "保存订单信息")
@PostMapping("/saveOrderInfo")
public Result<Long> saveOrderInfo(@RequestBody OrderInfoForm orderInfoForm) {
return Result.ok(orderInfoService.saveOrderInfo(orderInfoForm));
}
}
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo> implements OrderInfoService {
@Autowired
private OrderInfoMapper orderInfoMapper;
@Autowired
private OrderStatusLogMapper orderStatusLogMapper;
//乘客下单
@Override
public Long saveOrderInfo(OrderInfoForm orderInfoForm) {
//order_info添加订单数据
OrderInfo orderInfo = new OrderInfo();
BeanUtils.copyProperties(orderInfoForm,orderInfo);
//订单号
String orderNo = UUID.randomUUID().toString().replaceAll("-","");
orderInfo.setOrderNo(orderNo);
//订单状态
orderInfo.setStatus(OrderStatus.WAITING_ACCEPT.getStatus());
orderInfoMapper.insert(orderInfo);
//记录日志
this.log(orderInfo.getId(),orderInfo.getStatus());
return orderInfo.getId();
}
public void log(Long orderId, Integer status) {
OrderStatusLog orderStatusLog = new OrderStatusLog();
orderStatusLog.setOrderId(orderId);
orderStatusLog.setOrderStatus(status);
orderStatusLog.setOperateTime(new Date());
orderStatusLogMapper.insert(orderStatusLog);
}
}
/**
* 保存订单信息
* @param orderInfoForm
* @return
*/
@PostMapping("/order/info/saveOrderInfo")
Result<Long> saveOrderInfo(@RequestBody OrderInfoForm orderInfoForm);
@Data
public class SubmitOrderForm {
@Schema(description = "乘客id")
private Long customerId;
@Schema(description = "起始地点")
private String startLocation;
@Schema(description = "起始地点经度")
private BigDecimal startPointLongitude;
@Schema(description = "起始点伟度")
private BigDecimal startPointLatitude;
@Schema(description = "结束地点")
private String endLocation;
@Schema(description = "结束地点经度")
private BigDecimal endPointLongitude;
@Schema(description = "结束地点经度")
private BigDecimal endPointLatitude;
@Schema(description = "顾客好处费")
private BigDecimal favourFee = new BigDecimal(0);
}
// 说明:支持乘客添加好处费,这样能快速激励司机接单
@Operation(summary = "乘客下单")
@GuiguLogin
@PostMapping("/submitOrder")
public Result<Long> submitOrder(@RequestBody SubmitOrderForm submitOrderForm) {
submitOrderForm.setCustomerId(AuthContextHolder.getUserId());
return Result.ok(orderService.submitOrder(submitOrderForm));
}
@Autowired
private OrderInfoFeignClient orderInfoFeignClient;
@Override
public Long submitOrder(SubmitOrderForm submitOrderForm) {
//1.重新计算驾驶线路
CalculateDrivingLineForm calculateDrivingLineForm = new CalculateDrivingLineForm();
BeanUtils.copyProperties(submitOrderForm, calculateDrivingLineForm);
DrivingLineVo drivingLineVo = mapFeignClient.calculateDrivingLine(calculateDrivingLineForm).getData();
//2.重新计算订单费用
FeeRuleRequestForm calculateOrderFeeForm = new FeeRuleRequestForm();
calculateOrderFeeForm.setDistance(drivingLineVo.getDistance());
calculateOrderFeeForm.setStartTime(new Date());
calculateOrderFeeForm.setWaitMinute(0);
FeeRuleResponseVo feeRuleResponseVo = feeRuleFeignClient.calculateOrderFee(calculateOrderFeeForm).getData();
//3.封装订单信息对象
OrderInfoForm orderInfoForm = new OrderInfoForm();
//订单位置信息
BeanUtils.copyProperties(submitOrderForm, orderInfoForm);
//预估里程
orderInfoForm.setExpectDistance(drivingLineVo.getDistance());
orderInfoForm.setExpectAmount(feeRuleResponseVo.getTotalAmount());
//4.保存订单信息
Long orderId = orderInfoFeignClient.saveOrderInfo(orderInfoForm).getData();
//TODO启动任务调度,查询附近可以接单的司机
return orderId;
}
查询订单状态
查询订单状态接口
@Operation(summary = "根据订单id获取订单状态")
@GetMapping("/getOrderStatus/{orderId}")
public Result<Integer> getOrderStatus(@PathVariable Long orderId) {
return Result.ok(orderInfoService.getOrderStatus(orderId));
}
//根据订单id获取订单状态
@Override
public Integer getOrderStatus(Long orderId) {
//sql语句: select status from order_info where id=?
LambdaQueryWrapper<OrderInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(OrderInfo::getId,orderId);
wrapper.select(OrderInfo::getStatus);
//调用mapper方法
OrderInfo orderInfo = orderInfoMapper.selectOne(wrapper);
//订单不存在
if(orderInfo == null) {
return OrderStatus.NULL_ORDER.getStatus();
}
return orderInfo.getStatus();
}
乘客端远程调用
// 定义远程调用
/**
* 根据订单id获取订单状态
* @param orderId
* @return
*/
@GetMapping("/order/info/getOrderStatus/{orderId}")
Result<Integer> getOrderStatus(@PathVariable("orderId") Long orderId);
@Operation(summary = "查询订单状态")
@GuiguLogin
@GetMapping("/getOrderStatus/{orderId}")
public Result<Integer> getOrderStatus(@PathVariable Long orderId) {
return Result.ok(orderService.getOrderStatus(orderId));
}
//查询订单状态
@Override
public Integer getOrderStatus(Long orderId) {
Result<Integer> integerResult = orderInfoFeignClient.getOrderStatus(orderId);
return integerResult.getData();
}
司机端远程调用
-
乘客下单之后,当前订单状态是1等待接单,如果有司机接单,订单状态变化2 已接单
-
司机同样查询订单状态
@Tag(name = "订单API接口管理")
@RestController
@RequestMapping("/order")
@SuppressWarnings({"unchecked", "rawtypes"})
public class OrderController {
@Autowired
private OrderService orderService;
@Operation(summary = "查询订单状态")
@GuiguLogin
@GetMapping("/getOrderStatus/{orderId}")
public Result<Integer> getOrderStatus(@PathVariable Long orderId) {
return Result.ok(orderService.getOrderStatus(orderId));
}
}
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderInfoFeignClient orderInfoFeignClient;
@Override
public Integer getOrderStatus(Long orderId) {
return orderInfoFeignClient.getOrderStatus(orderId).getData();
}
}
第一,将来我们校企之间的合作应该是几年一报就行。别把时间浪费去写报告,科学研究报给谁,只有报给自己,因为科学是无尽的前沿。我们拨了款,你们就去研究,研究完公开就行。你们可以发表论文,也可以写书,没有必要带上我们员工的名字,毕竟他们已经拿了高工资。我们只要读你的论文明白了,我们就开始消化,消化以后再往下传,我们就做成产品赚到钱了,为什么要跟你们抢名呢?
https://baijiahao.baidu.com/s?id=1760664270073856317&wfr=spider&for=pc
擦亮花火、共创未来——任正非在“难题揭榜”花火奖座谈会上的讲话
任正非