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.LineShiftDriverMapper;
|
import com.stylefeng.guns.modular.system.dao.OrderCrossCityMapper;
|
import com.stylefeng.guns.modular.system.dao.ReassignMapper;
|
import com.stylefeng.guns.modular.system.model.*;
|
import com.stylefeng.guns.modular.system.service.*;
|
import com.stylefeng.guns.modular.system.util.*;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
|
@Service
|
public class ReassignServiceImpl extends ServiceImpl<ReassignMapper, Reassign> implements IReassignService {
|
|
@Resource
|
private ReassignMapper reassignMapper;
|
|
@Resource
|
private LineShiftDriverMapper lineShiftDriverMapper;
|
|
@Resource
|
private OrderCrossCityMapper orderCrossCityMapper;
|
|
@Autowired
|
private IOrderCrossCityService orderCrossCityService;
|
|
@Autowired
|
private IDriverService driverService;
|
|
@Autowired
|
private DateUtil dateUtil;
|
|
@Autowired
|
private IDispatchService dispatchService;
|
|
@Autowired
|
private IOrderPrivateCarService orderPrivateCarService;
|
|
@Autowired
|
private IOrderCancelService orderCancelService;
|
|
@Autowired
|
private IUserInfoService userInfoService;
|
|
@Autowired
|
private ITransactionDetailsService transactionDetailsService;
|
|
@Autowired
|
private IPaymentRecordService paymentRecordService;
|
|
// @Autowired
|
// private ICBCPayUtil icbcPayUtil;
|
|
@Autowired
|
private IIncomeService incomeService;
|
|
@Autowired
|
private PushUtil pushUtil;
|
|
@Autowired
|
private ISystemNoticeService systemNoticeService;
|
|
@Autowired
|
private PayMoneyUtil payMoneyUtil;
|
|
|
|
|
/**
|
* 调度端更换司机执行改派操作
|
* @param driverId
|
* @param orderIds
|
* @param uid
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil dispatchReassign(Integer lineShiftId, String time, Integer driverId, String orderIds, Integer uid) throws Exception {
|
if(ToolUtil.isNotEmpty(orderIds)){
|
Dispatch dispatch = dispatchService.selectById(uid);
|
Driver driver2 = driverService.selectById(driverId);
|
Date date = dateUtil.getStartAndEndDate(time).get("startTime");
|
List<LineShiftDriver> newLineShiftDriver = lineShiftDriverMapper.query(lineShiftId, driverId, date);
|
if(newLineShiftDriver.size() == 0){
|
return ResultUtil.error("司机没有预约该班次");
|
}
|
|
String[] split = orderIds.split(",");
|
List<OrderCrossCity> orderCrossCities = orderCrossCityService.selectBatchIds(Arrays.asList(split));
|
Integer oldDriver = null;
|
Integer num = 0;
|
String seat = "";
|
List<Reassign> list = new ArrayList<>();
|
for(OrderCrossCity occ : orderCrossCities){
|
oldDriver = occ.getDriverId();
|
occ.setDriverId(driverId);
|
occ.setLineShiftDriverId(newLineShiftDriver.get(0).getId());
|
num += occ.getPeopleNumber();
|
seat += occ.getSeatNumber() + ",";
|
|
//添加改派记录
|
Reassign reassign = new Reassign();
|
reassign.setOrderType(3);
|
reassign.setOrderId(occ.getId());
|
reassign.setOriginalDriverId(occ.getDriverId());
|
reassign.setOriginalCarId(occ.getCarId());
|
reassign.setInsertTime(new Date());
|
reassign.setNowDriverId(driverId);
|
reassign.setNowCarId(driver2.getCarId());
|
reassign.setState(3);
|
reassign.setReason("调度改派");
|
reassign.setRemark("调度“" + dispatch.getName() + "-" + uid + "”执行改派操作");
|
reassign.setCompleteTime(new Date());
|
list.add(reassign);
|
|
//修改收入明细,转给新司机(因为是先支付金额)
|
Driver driver1 = driverService.selectById(oldDriver);
|
Driver driver3 = driverService.selectById(driverId);
|
List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("userType", 2).eq("objectId", oldDriver).eq("type", 2).eq("incomeId", reassign.getOrderId()).eq("orderType", 3));
|
if(incomes.size() > 0){
|
Income income = incomes.get(0);
|
income.setObjectId(driverId);
|
incomeService.updateById(income);
|
|
driver1.setBusinessMoney(driver1.getBusinessMoney() - income.getMoney());
|
driver1.setLaveBusinessMoney(driver1.getLaveBusinessMoney() - income.getMoney());
|
driver1.setBalance(driver1.getBalance() - income.getMoney());
|
|
driver3.setBusinessMoney(driver3.getBusinessMoney() + income.getMoney());
|
driver3.setLaveBusinessMoney(driver3.getLaveBusinessMoney() + income.getMoney());
|
driver3.setBalance(driver3.getBalance() + income.getMoney());
|
}
|
|
driverService.updateById(driver1);
|
driverService.updateById(driver3);
|
}
|
if(num > newLineShiftDriver.get(0).getLaveSeat()){
|
return ResultUtil.error("司机车辆剩余座位数不足");
|
}
|
if(orderCrossCities.size() > 0){
|
orderCrossCityService.updateBatchById(orderCrossCities);
|
}
|
if(list.size() > 0){//存储改派记录数据
|
this.insertBatch(list);
|
}
|
|
//修改原司机座位数据(还原)
|
List<LineShiftDriver> query = lineShiftDriverMapper.query(lineShiftId, oldDriver, date);
|
if(query.size() > 0){
|
LineShiftDriver lineShiftDriver = query.get(0);
|
lineShiftDriver.setLaveSeat((lineShiftDriver.getLaveSeat() + num) > lineShiftDriver.getTotalSeat() ? lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + num);
|
lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1));
|
lineShiftDriverMapper.updateById(lineShiftDriver);
|
}
|
//修改原司机为空闲
|
Driver driver1 = driverService.selectById(oldDriver);
|
if(null != driver1){
|
driver1.setState(2);
|
driverService.updateById(driver1);
|
}
|
|
//修改新司机的座位数据
|
LineShiftDriver lineShiftDriver = newLineShiftDriver.get(0);
|
lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() - num);
|
String[] split1 = lineShiftDriver.getLaveSeatNumber().split(",");
|
seat = "";
|
for(int i = num; i < split1.length; i++){
|
seat += split1[i] + ",";
|
}
|
lineShiftDriver.setLaveSeatNumber(seat.substring(0, seat.length() - 1));
|
lineShiftDriverMapper.updateById(lineShiftDriver);
|
//修改新司机为服务中
|
if(null != driver2){
|
driver2.setState(3);
|
driverService.updateById(driver2);
|
}
|
|
|
}
|
return ResultUtil.success();
|
}
|
|
|
/**
|
* 获取提交改派申请的数据
|
* @param uid
|
* @param pageNum
|
* @param size
|
* @return
|
*/
|
@Override
|
public List<Map<String, Object>> queryApplyReassignList(Integer state, Integer uid, Integer pageNum, Integer size) throws Exception {
|
Integer companyId = dispatchService.selectById(uid).getCompanyId();
|
pageNum = (pageNum - 1) * size;
|
return reassignMapper.queryApplyReassignList(companyId, state, pageNum, size);
|
}
|
|
|
/**
|
* 获取改派详情
|
* @param id
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public Map<String, Object> queryReassignInfo(Integer id) throws Exception {
|
return reassignMapper.queryReassignInfo(id);
|
}
|
|
|
|
/**
|
* 取消改派申请
|
* @param id
|
* @param uid
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil cancelReassign(Integer id, Integer uid) throws Exception {
|
Reassign reassign = this.selectById(id);
|
if(reassign.getState() == 3){
|
return ResultUtil.error("改派已同意了");
|
}
|
if(reassign.getState() == 4){
|
return ResultUtil.error("改派已取消了");
|
}
|
if(reassign.getState() == 5){
|
return ResultUtil.error("改派已拒绝了");
|
}
|
if(reassign.getOrderType() == 1){//专车
|
OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
|
if(orderPrivateCar.getState() > 5 && orderPrivateCar.getState() != 11){
|
return ResultUtil.error("订单状态不在可取消范围内");
|
}
|
orderPrivateCar.setState(10);//取消
|
orderPrivateCarService.updateById(orderPrivateCar);
|
|
new Thread(new Runnable() {//发送消息提醒
|
@Override
|
public void run() {
|
pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), reassign.getOrderId(), 1, 10, 0);
|
if(null != orderPrivateCar.getDriverId()){
|
//修改司机为空闲
|
Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
|
driver.setState(2);
|
driverService.updateById(driver);
|
pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), reassign.getOrderId(), 1, 10, 0);
|
}
|
}
|
}).start();
|
//添加消息
|
systemNoticeService.addSystemNotice(1, "调度已成功取消出行订单,谢谢使用!", orderPrivateCar.getUserId(), 1);
|
}
|
if(reassign.getOrderType() == 3){//跨城
|
OrderCrossCity orderCrossCity = orderCrossCityService.selectById(reassign.getOrderId());
|
if(orderCrossCity.getState() > 5 && orderCrossCity.getState() != 11){
|
return ResultUtil.error("订单状态不在可取消范围内");
|
}
|
orderCrossCity.setState(10);
|
orderCrossCityService.updateById(orderCrossCity);
|
|
//修改司机信息
|
LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
|
lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat() ?
|
lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
|
String seat = "";
|
String[] split = orderCrossCity.getSeatNumber().split(",");
|
for(String s : split){
|
seat += s + ",";
|
}
|
seat = lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1);
|
|
//总和大于总座位数的情况
|
if(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat()){
|
seat = "";
|
for(int i = 1; i <= lineShiftDriver.getTotalSeat(); i++){
|
seat += i + ",";
|
}
|
seat = seat.substring(0, seat.length() - 1);
|
}
|
lineShiftDriver.setLaveSeatNumber(seat);
|
lineShiftDriverMapper.updateById(lineShiftDriver);
|
if(lineShiftDriver.getLaveSeat() >= lineShiftDriver.getTotalSeat()){
|
Driver driver = driverService.selectById(reassign.getOriginalDriverId());
|
driver.setState(2);
|
driverService.updateById(driver);
|
}
|
|
//已支付的情况下进行退款操作
|
if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()){
|
if(orderCrossCity.getPayType() == 3){//余额支付
|
UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId());
|
userInfo.setBalance(userInfo.getBalance() + orderCrossCity.getPayMoney());
|
userInfoService.updateById(userInfo);
|
//添加交易明细
|
transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城订单取消退款", orderCrossCity.getPayMoney(), 1, 1, 1, 3, id);
|
}else{
|
PaymentRecord query = paymentRecordService.query(1, null, null, id, 3, null, 2);
|
if(null == query){
|
return ResultUtil.error("订单还未进行支付");
|
}
|
|
if(query.getPayType() == 1){//微信
|
Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), orderCrossCity.getId() + "_3", query.getAmount().toString(), query.getAmount().toString(), "/user/base/cancleOrderWXPay");
|
if(!"SUCCESS".equals(map.get("return_code"))){
|
return ResultUtil.error(map.get("return_msg"));
|
}
|
}else{//支付宝
|
Map<String, String> map = payMoneyUtil.aliRefund(query.getCode(), query.getAmount().toString());
|
if(!"10000".equals(map.get("code"))){
|
return ResultUtil.error(map.get("msg"));
|
}
|
//添加交易明细
|
transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, orderCrossCity.getId());
|
}
|
|
|
// Map<String, Object> merrefund = icbcPayUtil.merrefund(query.getCode(), "", query.getAmount(), id + "_3", orderCrossCity.getOrderNum());
|
// if(Integer.valueOf(merrefund.get("code").toString()) == 0){
|
// boolean b = true;
|
// while (b){
|
// Map<String, Object> refundqry = icbcPayUtil.refundqry("", query.getCode(), orderCrossCity.getOrderNum());
|
// if(Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 0){//成功
|
// //添加交易明细
|
// transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城订单取消退款", query.getAmount(), 1, 1, 1, 3, id);
|
// }
|
// if(Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 1){//失败
|
// return ResultUtil.error("订单取消失败(退款不成功)");
|
// }
|
// if(Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 2){//未知
|
// return ResultUtil.error("退款返回未知异常");
|
// }
|
// }
|
// }
|
}
|
|
//添加负的收入明细
|
List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", reassign.getOrderId()).eq("orderType", 3));
|
for(Income income : incomes){
|
if(income.getUserType() == 2){//处理司机的收入
|
Driver driver = driverService.selectById(income.getObjectId());
|
driver.setBalance(driver.getBalance() + income.getMoney());
|
driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney());
|
driver.setBusinessMoney(driver.getBusinessMoney() - income.getMoney());
|
driverService.updateById(driver);
|
}
|
Income income1 = new Income();
|
BeanUtils.copyProperties(income, income1);
|
income1.setMoney(income.getMoney() * -1);
|
income1.setId(null);
|
income1.setInsertTime(new Date());
|
incomeService.insert(income1);
|
}
|
}
|
|
new Thread(new Runnable() {//发送消息提醒
|
@Override
|
public void run() {
|
pushUtil.pushOrderState(1, orderCrossCity.getUserId(), reassign.getOrderId(), 3, 10, 0);
|
if(null != orderCrossCity.getDriverId()){
|
pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), reassign.getOrderId(), 3, 10, 0);
|
//修改司机为空闲
|
List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11);
|
if(orderCrossCities.size() == 0){
|
Driver driver = driverService.selectById(orderCrossCity.getDriverId());
|
driver.setState(2);
|
driverService.updateById(driver);
|
}
|
}
|
}
|
}).start();
|
//添加消息
|
systemNoticeService.addSystemNotice(1, "调度已成功取消出行订单,谢谢使用!", orderCrossCity.getUserId(), 1);
|
}
|
|
//添加取消记录
|
Dispatch dispatch = dispatchService.selectById(uid);
|
OrderCancel orderCancel = new OrderCancel();
|
orderCancel.setOrderId(reassign.getOrderId());
|
orderCancel.setOrderType(reassign.getOrderType());
|
orderCancel.setReason("调度端取消订单");
|
orderCancel.setRemark("调度“" + dispatch.getName() + "-" + uid + "”执行取消操作");
|
orderCancel.setState(2);
|
orderCancel.setInsertTime(new Date());
|
orderCancel.setUserType(3);
|
orderCancel.setUserId(uid);
|
orderCancelService.insert(orderCancel);
|
|
reassign.setState(4);//取消
|
reassign.setReviewer(uid);
|
reassign.setReviewerType(1);
|
reassign.setCompleteTime(new Date());
|
this.updateById(reassign);
|
return ResultUtil.success();
|
}
|
|
|
|
|
/**
|
* 拒绝改派申请
|
* @param id
|
* @param uid
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil refuseReassign(Integer id, Integer uid) throws Exception {
|
Reassign reassign = this.selectById(id);
|
if(reassign.getState() == 3){
|
return ResultUtil.error("改派已同意了");
|
}
|
if(reassign.getState() == 4){
|
return ResultUtil.error("改派已取消了");
|
}
|
if(reassign.getState() == 5){
|
return ResultUtil.error("改派已拒绝了");
|
}
|
if(reassign.getOrderType() == 1){//专车
|
OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
|
if(orderPrivateCar.getState() != 11){
|
return ResultUtil.error("订单状态不在可改派范围内");
|
}
|
}
|
if(reassign.getOrderType() == 3){//跨城
|
OrderCrossCity orderCrossCity = orderCrossCityService.selectById(reassign.getOrderId());
|
if(orderCrossCity.getState() != 11){
|
return ResultUtil.error("订单状态不在可改派范围内");
|
}
|
}
|
|
if(reassign.getState() == 2){//退款操作
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
|
String out_refund_no = sdf.format(new Date()) + "_" + reassign.getId();
|
Double money = reassign.getMoney();
|
if(reassign.getPayType() == 1){//微信
|
Map<String, String> map = payMoneyUtil.wxRefund(reassign.getPayOrder(), out_refund_no, money.toString(), money.toString(), "/dispatch/base/order/reassignRefundCallback");
|
if(null == map || !"SUCCESS".equals(map.get("return_code"))){
|
System.err.println(map.get("return_msg"));
|
return ResultUtil.error(map.get("return_msg"));
|
}
|
reassign.setReviewer(uid);
|
reassign.setReviewerType(1);
|
}
|
if(reassign.getPayType() == 2){//支付宝
|
Map<String, String> map = payMoneyUtil.aliRefund(reassign.getPayOrder(), money.toString());
|
if(null != map && "10000".equals(map.get("code"))){
|
String trade_no = map.get("trade_no");
|
reassign.setState(5);//拒绝
|
reassign.setReviewer(uid);
|
reassign.setReviewerType(1);
|
reassign.setCompleteTime(new Date());
|
this.updateById(reassign);
|
|
if(reassign.getOrderType() == 1){//专车
|
OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
|
orderPrivateCar.setState(orderPrivateCar.getOldState());
|
orderPrivateCar.setOldState(null);
|
orderPrivateCarService.updateAllColumnById(orderPrivateCar);
|
}
|
if(reassign.getOrderType() == 3){//跨城
|
OrderCrossCity orderCrossCity = orderCrossCityService.selectById(reassign.getOrderId());
|
orderCrossCity.setState(orderCrossCity.getOldState());
|
orderCrossCity.setOldState(null);
|
orderCrossCityService.updateAllColumnById(orderCrossCity);
|
}
|
}
|
if(null == map || !"10000".equals(map.get("code"))){
|
System.err.println(map.get("msg"));
|
return ResultUtil.error(map.get("msg"));
|
}
|
}
|
if(reassign.getPayType() == 3){//余额
|
Driver driver = driverService.selectById(reassign.getOriginalDriverId());
|
driver.setBalance(driver.getBalance() + money);
|
driverService.updateById(driver);
|
|
reassign.setState(5);//拒绝
|
reassign.setReviewer(uid);
|
reassign.setReviewerType(1);
|
reassign.setCompleteTime(new Date());
|
this.updateById(reassign);
|
|
if(reassign.getOrderType() == 1){//专车
|
OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
|
orderPrivateCar.setState(orderPrivateCar.getOldState());
|
orderPrivateCar.setOldState(null);
|
orderPrivateCarService.updateAllColumnById(orderPrivateCar);
|
}
|
if(reassign.getOrderType() == 3){//跨城
|
OrderCrossCity orderCrossCity = orderCrossCityService.selectById(reassign.getOrderId());
|
orderCrossCity.setState(orderCrossCity.getOldState());
|
orderCrossCity.setOldState(null);
|
orderCrossCityService.updateAllColumnById(orderCrossCity);
|
}
|
}
|
}else{
|
reassign.setState(5);//拒绝
|
reassign.setReviewer(uid);
|
reassign.setReviewerType(1);
|
reassign.setCompleteTime(new Date());
|
this.updateById(reassign);
|
|
if(reassign.getOrderType() == 1){//专车
|
OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
|
orderPrivateCar.setState(orderPrivateCar.getOldState());
|
orderPrivateCar.setOldState(null);
|
orderPrivateCarService.updateAllColumnById(orderPrivateCar);
|
}
|
if(reassign.getOrderType() == 3){//跨城
|
OrderCrossCity orderCrossCity = orderCrossCityService.selectById(reassign.getOrderId());
|
orderCrossCity.setState(orderCrossCity.getOldState());
|
orderCrossCity.setOldState(null);
|
orderCrossCityService.updateAllColumnById(orderCrossCity);
|
}
|
}
|
return ResultUtil.success();
|
}
|
|
|
/**
|
* 执行改派操作
|
* @param id
|
* @param driverId
|
* @param uid
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil executeReassign(Integer id, Integer driverId, Integer uid) throws Exception {
|
Driver nowDriver = driverService.selectById(driverId);
|
Reassign reassign = this.selectById(id);
|
if(reassign.getState() == 3){
|
return ResultUtil.error("改派已同意了");
|
}
|
if(reassign.getState() == 4){
|
return ResultUtil.error("改派已取消了");
|
}
|
if(reassign.getState() == 5){
|
return ResultUtil.error("改派已拒绝了");
|
}
|
|
reassign.setNowDriverId(driverId);
|
reassign.setNowCarId(nowDriver.getCarId());
|
reassign.setState(3);//同意
|
reassign.setReviewer(uid);
|
reassign.setReviewerType(1);
|
reassign.setCompleteTime(new Date());
|
this.updateById(reassign);
|
|
if(reassign.getOrderType() == 1){//专车
|
//修改原司机信息
|
Driver driver = driverService.selectById(reassign.getOriginalDriverId());
|
driver.setState(2);
|
driverService.updateById(driver);
|
|
//修改新司机信息
|
nowDriver.setState(3);
|
driverService.updateById(nowDriver);
|
|
//修改订单数据
|
OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
|
orderPrivateCar.setDriverId(driverId);
|
orderPrivateCar.setCarId(nowDriver.getCarId());
|
orderPrivateCar.setState(orderPrivateCar.getOldState());
|
orderPrivateCar.setOldState(null);
|
orderPrivateCarService.updateAllColumnById(orderPrivateCar);
|
}
|
|
if(reassign.getOrderType() == 3){//跨陈
|
//修改原司机信息
|
OrderCrossCity orderCrossCity = orderCrossCityService.selectById(reassign.getOrderId());
|
LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
|
lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat() ?
|
lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
|
String seat = "";
|
String[] split = orderCrossCity.getSeatNumber().split(",");
|
for(String s : split){
|
seat += s + ",";
|
}
|
seat = lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1);
|
|
//总和大于总座位数的情况
|
if(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat()){
|
seat = "";
|
for(int i = 1; i <= lineShiftDriver.getTotalSeat(); i++){
|
seat += i + ",";
|
}
|
seat = seat.substring(0, seat.length() - 1);
|
}
|
lineShiftDriver.setLaveSeatNumber(seat);
|
lineShiftDriverMapper.updateById(lineShiftDriver);
|
Driver oldDriver = driverService.selectById(reassign.getOriginalDriverId());
|
if(lineShiftDriver.getLaveSeat() >= lineShiftDriver.getTotalSeat()){
|
oldDriver.setState(2);
|
}
|
|
//修改新司机数据
|
List<LineShiftDriver> query = lineShiftDriverMapper.query(lineShiftDriver.getLineShiftId(), driverId, orderCrossCity.getTravelTime());
|
if(query.size() == 0){
|
return ResultUtil.error("司机没有预约班次");
|
}
|
LineShiftDriver lineShiftDriver1 = query.get(0);
|
if(lineShiftDriver1.getLaveSeat() < orderCrossCity.getPeopleNumber()){
|
return ResultUtil.runErr("司机车辆剩余座位数不足");
|
}
|
lineShiftDriver1.setLaveSeat(lineShiftDriver1.getLaveSeat() - orderCrossCity.getPeopleNumber());
|
String[] split1 = lineShiftDriver1.getLaveSeatNumber().split(",");
|
String seat1 = "";//使用
|
String seat2 = "";//未使用
|
for(int i = 0; i < orderCrossCity.getPeopleNumber(); i++){
|
seat1 += split1[i] + ",";
|
}
|
for(int i = orderCrossCity.getPeopleNumber(); i < split1.length; i++){
|
seat2 += split1[i] + ",";
|
}
|
lineShiftDriver1.setLaveSeatNumber(seat2.substring(0, seat2.length() - 1));
|
lineShiftDriverMapper.updateById(lineShiftDriver1);
|
Driver driver = driverService.selectById(driverId);
|
if(driver.getState() == 1){
|
return ResultUtil.error("司机还未上班呢");
|
}
|
if(driver.getState() == 2){
|
driver.setState(3);
|
}
|
|
//修改订单数据
|
orderCrossCity.setDriverId(driverId);
|
orderCrossCity.setCarId(nowDriver.getCarId());
|
orderCrossCity.setSeatNumber(seat1.substring(0, seat1.length() - 1));
|
orderCrossCity.setState(orderCrossCity.getOldState());
|
orderCrossCity.setOldState(null);
|
orderCrossCity.setIsReassign(2);
|
orderCrossCity.setLineShiftDriverId(lineShiftDriver1.getId());
|
orderCrossCity.setOrderNum(orderCrossCityService.getOrderNum(driverId, orderCrossCity.getLineShiftDriverId()));
|
orderCrossCityService.updateAllColumnById(orderCrossCity);
|
|
//修改收入明细,转给新司机(因为是先支付金额)
|
List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("userType", 2).eq("objectId", reassign.getOriginalDriverId()).eq("type", 2).eq("incomeId", reassign.getOrderId()).eq("orderType", 3));
|
if(incomes.size() > 0){
|
Income income = incomes.get(0);
|
income.setObjectId(driverId);
|
incomeService.updateById(income);
|
|
oldDriver.setBusinessMoney(oldDriver.getBusinessMoney() - income.getMoney());
|
oldDriver.setLaveBusinessMoney(oldDriver.getLaveBusinessMoney() - income.getMoney());
|
oldDriver.setBalance(oldDriver.getBalance() - income.getMoney());
|
|
driver.setBusinessMoney(driver.getBusinessMoney() + income.getMoney());
|
driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() + income.getMoney());
|
driver.setBalance(driver.getBalance() + income.getMoney());
|
}
|
|
driverService.updateById(oldDriver);
|
driverService.updateById(driver);
|
}
|
return ResultUtil.success();
|
}
|
}
|