package com.stylefeng.guns.modular.system.service.impl;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.system.dao.OrderCrossCityMapper;
|
import com.stylefeng.guns.modular.system.dao.OrderPrivateCarMapper;
|
import com.stylefeng.guns.modular.system.dao.OrderTaxiMapper;
|
import com.stylefeng.guns.modular.system.model.*;
|
import com.stylefeng.guns.modular.system.service.*;
|
import com.stylefeng.guns.modular.system.util.*;
|
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.Arrays;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
|
@Service
|
public class OrderTaxiServiceImpl extends ServiceImpl<OrderTaxiMapper, OrderTaxi> implements IOrderTaxiService {
|
|
@Autowired
|
private IDispatchService dispatchService;
|
|
@Autowired
|
private IOrderCancelService orderCancelService;
|
|
@Autowired
|
private ISystemNoticeService systemNoticeService;
|
|
@Autowired
|
private PushUtil pushUtil;
|
|
@Autowired
|
private IDriverService driverService;
|
|
@Autowired
|
private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
|
|
@Autowired
|
private ICompanyCityService companyCityService;
|
|
@Autowired
|
private GDMapGeocodingUtil gdMapGeocodingUtil;
|
|
@Autowired
|
private IDriverServiceService driverServiceService;
|
|
@Autowired
|
private ChinaMobileUtil chinaMobileUtil;
|
|
@Autowired
|
private IUserInfoService userInfoService;
|
|
@Resource
|
private OrderPrivateCarMapper orderPrivateCarMapper;
|
|
@Resource
|
private OrderTaxiMapper orderTaxiMapper;
|
|
@Resource
|
private OrderCrossCityMapper orderCrossCityMapper;
|
|
@Value("${pushMinistryOfTransport}")
|
private boolean pushMinistryOfTransport;
|
|
|
|
@Override
|
public List<Map<String, Object>> queryOrderList(String search, String orderSource, String state, Integer pageNum, Integer size, Integer uid) throws Exception {
|
Dispatch dispatch = dispatchService.selectById(uid);
|
Integer companyId = null != dispatch.getFranchiseeId() ? dispatch.getFranchiseeId() : dispatch.getCompanyId();
|
pageNum = (pageNum - 1) * size;
|
List<String> orderSources = null;
|
if(ToolUtil.isNotEmpty(orderSource)){
|
orderSources = Arrays.asList(orderSource.split(","));
|
}
|
List<String> states = null;
|
if(ToolUtil.isNotEmpty(state)){
|
states = Arrays.asList(state.split(","));
|
}
|
return this.baseMapper.queryOrderList(search, orderSources, states, companyId, pageNum, size);
|
}
|
|
@Override
|
public Map<String, Object> queryOrderInfo(Integer orderId) throws Exception {
|
return this.baseMapper.queryOrderInfo(orderId);
|
}
|
|
@Override
|
public ResultUtil cancelOrder(Integer orderId) throws Exception {
|
OrderTaxi orderTaxi = this.selectById(orderId);
|
if(orderTaxi.getState() == 10 || orderTaxi.getState() == 12){
|
return ResultUtil.error("不允许重复取消");
|
}
|
if(orderTaxi.getState() == 8 || orderTaxi.getState() == 9){
|
return ResultUtil.error("订单已完成,不允许取消");
|
}
|
orderTaxi.setState(10);
|
this.updateById(orderTaxi);
|
|
//添加取消记录
|
OrderCancel orderCancel = new OrderCancel();
|
orderCancel.setOrderId(orderId);
|
orderCancel.setOrderType(2);
|
orderCancel.setReason("调度端取消");
|
orderCancel.setRemark("调度端取消");
|
orderCancel.setState(2);
|
orderCancel.setInsertTime(new Date());
|
orderCancel.setUserType(2);
|
orderCancelService.insert(orderCancel);
|
|
new Thread(new Runnable() {//发送消息提醒
|
@Override
|
public void run() {
|
pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderId, 2, 10, 0);
|
if(null != orderTaxi.getDriverId()){
|
//修改司机为空闲
|
Driver driver = driverService.selectById(orderTaxi.getDriverId());
|
driver.setState(2);
|
driverService.updateById(driver);
|
pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderId, 2, 10, 0);
|
}
|
}
|
}).start();
|
//添加消息
|
systemNoticeService.addSystemNotice(1, "调度已成功取消出行订单,谢谢使用!", orderTaxi.getUserId(), 1);
|
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
if(pushMinistryOfTransport){//上传数据
|
pushMinistryOfTransportUtil.orderCancel(orderId);
|
}
|
}
|
}).start();
|
|
return ResultUtil.success();
|
}
|
|
@Override
|
public ResultUtil<BaseWarpper> taxiOrder(OrderTaxi orderTaxi, Integer uid) throws Exception {
|
//定义用户所属公司
|
Company query = companyCityService.query(String.valueOf(orderTaxi.getStartLon()), String.valueOf(orderTaxi.getStartLat()));
|
if(null == query){
|
return ResultUtil.error("出发点暂未开通");
|
}
|
Dispatch dispatch = dispatchService.selectById(uid);
|
UserInfo userInfo = userInfoService.selectOne(new EntityWrapper<UserInfo>().eq("phone", orderTaxi.getPassengersPhone()).ne("flag", 3));
|
if(userInfo == null){
|
userInfo = new UserInfo();
|
userInfo.setName(orderTaxi.getPassengers());
|
userInfo.setPhone(orderTaxi.getPassengersPhone());
|
userInfo.setCompanyId(dispatch.getCompanyId());
|
userInfo.setState(1);
|
userInfo.setFlag(1);
|
userInfo.setInsertTime(new Date());
|
userInfoService.insert(userInfo);
|
}
|
|
if(orderTaxi.getTravelTime().getTime() > (System.currentTimeMillis() + 600000)){
|
orderTaxi.setOrderType(2);
|
}
|
|
/**
|
* 1.出租车、专车、跨城有待支付的订单不能叫车
|
* 2.小件物流有未完成的订单可以下跨城、专车、出租车
|
* 3.出租车、专车、跨城有预约单可以下即时单
|
*/
|
List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(userInfo.getId(), null, 1, 7, 12);
|
if(orderPrivateCars.size() > 0){
|
return ResultUtil.error("乘客有未完成的订单");
|
}
|
List<OrderTaxi> list = orderTaxiMapper.queryByState(userInfo.getId(), null, 1, 7, 12);
|
if(list.size() > 0){
|
return ResultUtil.error("乘客有未完成的订单");
|
}
|
List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(userInfo.getId(), 7, 12);
|
if(orderCrossCities1.size() > 0){
|
return ResultUtil.error("乘客有未完成的订单");
|
}
|
if(orderTaxi.getOrderType() == 1){
|
orderPrivateCars = orderPrivateCarMapper.queryByState(userInfo.getId(), 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12);
|
if(orderPrivateCars.size() > 0){
|
return ResultUtil.error("乘客有未完成的订单");
|
}
|
list = orderTaxiMapper.queryByState(userInfo.getId(), 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12);
|
if(list.size() > 0){
|
return ResultUtil.error("乘客有未完成的订单");
|
}
|
}
|
|
|
|
|
orderTaxi.setOrderNum(this.getOrderNum());
|
Map<String, String> geocode = gdMapGeocodingUtil.geocode(String.valueOf(orderTaxi.getPlacementLon()), String.valueOf(orderTaxi.getPlacementLat()));
|
orderTaxi.setPlacementAddress(geocode.get("address"));
|
orderTaxi.setStartAddress(orderTaxi.getStartAddress().replaceAll("& #40;", "\\("));//特殊字符转义
|
orderTaxi.setStartAddress(orderTaxi.getStartAddress().replaceAll("& #41;", "\\)"));
|
orderTaxi.setEndAddress(orderTaxi.getEndAddress().replaceAll("& #40;", "\\("));
|
orderTaxi.setEndAddress(orderTaxi.getEndAddress().replaceAll("& #41;", "\\)"));
|
orderTaxi.setUserId(userInfo.getId());
|
orderTaxi.setMileage(0D);
|
orderTaxi.setOrderMoney(0D);
|
orderTaxi.setTravelMoney(0D);
|
orderTaxi.setParkMoney(0D);
|
orderTaxi.setRoadTollMoney(0D);
|
orderTaxi.setRedPacketMoney(0D);
|
orderTaxi.setCouponMoney(0D);
|
orderTaxi.setInsertTime(new Date());
|
orderTaxi.setIsReassign(1);
|
orderTaxi.setState(1);//待接单
|
if(null != orderTaxi.getDriverId()){
|
Driver driver = driverService.selectById(orderTaxi.getDriverId());
|
if(null == driver){
|
return ResultUtil.error("司机信息有误");
|
}
|
if(driver.getAuthState() == 1){
|
return ResultUtil.error("司机信息还未完成审核,无法完成下单");
|
}
|
if(driver.getAuthState() == 3){
|
return ResultUtil.error("司机账户已被冻结,无法提供服务");
|
}
|
if(driver.getAuthState() == 4){
|
return ResultUtil.error("司机信息未通过审核,无法提供服务");
|
}
|
if(driver.getState() == 1){
|
return ResultUtil.error("司机还未上线,无法提供服务");
|
}
|
if(driver.getState() == 3){
|
return ResultUtil.error("司机正在服务中,无法提供服务");
|
}
|
List<DriverService> driverServices = driverServiceService.query(orderTaxi.getDriverId(), 2);
|
if(driverServices.size() == 0){
|
return ResultUtil.error("该司机不能服务此业务");
|
}
|
|
orderTaxi.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : (
|
driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1));
|
orderTaxi.setCarId(driver.getCarId());
|
orderTaxi.setState(2);//待出发
|
orderTaxi.setSnatchOrderTime(new Date());
|
|
// //调用高德创建轨迹
|
// String s = gdFalconUtil.selectTerminal(driver.getPhone());
|
// String track = gdFalconUtil.createTrack(s);
|
// orderTaxi.setTrackId(track);
|
//
|
//调用移动的小号接口
|
Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderTaxi.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
|
if(String.valueOf(map.get("code")).equals("200")){
|
orderTaxi.setTelX(map.get("telX"));
|
orderTaxi.setBindId(map.get("bindId"));
|
}
|
|
driver.setState(3);
|
driverService.updateById(driver);
|
}
|
|
this.insert(orderTaxi);
|
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
if(orderTaxi.getState() == 2){
|
//推送司机订单状态
|
pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0);
|
|
pushUtil.pushDriverPosition(orderTaxi.getId(), 2);
|
}
|
}
|
}).start();
|
|
//添加消息
|
systemNoticeService.addSystemNotice(1, "您的出租车订单已下单成功,我们正在为您指派司机,请稍后!", orderTaxi.getUserId(), 1);
|
|
BaseWarpper baseWarpper = new BaseWarpper();
|
baseWarpper.setId(orderTaxi.getId());
|
return ResultUtil.success(baseWarpper);
|
}
|
|
|
public synchronized String getOrderNum() throws Exception{
|
int size = this.selectCount(null);
|
return "TAXI" + String.valueOf(1000000 + size + 1).substring(1);
|
}
|
}
|