From 4f75e746dc006f487a1a7de8e14c497148911b0e Mon Sep 17 00:00:00 2001 From: guyue <1721849008@qq.com> Date: 星期六, 16 八月 2025 00:30:09 +0800 Subject: [PATCH] 抢单以及转派 --- DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java | 313 +++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 273 insertions(+), 40 deletions(-) diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java index 72261a4..67090e1 100644 --- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java +++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java @@ -1,7 +1,11 @@ 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.api.OrderController; +import com.stylefeng.guns.modular.crossCity.dao.LineShiftDriverMapper; +import com.stylefeng.guns.modular.crossCity.model.LineShiftDriver; import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity; import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService; import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics; @@ -9,6 +13,7 @@ import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsSpreadService; import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; +import com.stylefeng.guns.modular.system.dao.CarModelMapper; import com.stylefeng.guns.modular.system.dao.DispatchMapper; import com.stylefeng.guns.modular.system.dao.ReassignMapper; import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper; @@ -23,6 +28,9 @@ import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import java.math.BigDecimal; @@ -84,6 +92,20 @@ @Value("${callbackPath}") private String callbackPath; + @Autowired + private IReassignService reassignService; + + @Resource + private LineShiftDriverMapper lineShiftDriverMapper; + + @Autowired + private OrderController orderController; + + @Resource + private CarModelMapper carModelMapper; + + @Autowired + private ICarService carService; /** @@ -242,7 +264,7 @@ * @throws Exception */ @Override - public ResultUtil saveData_(Reassign reassign, String orderIds, Integer uid, Integer type) throws Exception { + public ResultUtil saveData_(Reassign reassign, String orderIds, Integer uid, Integer type,Integer newDriverId) throws Exception { type = null == type ? 2 : type;//现目前微信只支持小程序支付 String content = reassign.getRemark(); if(ToolUtil.isNotEmpty(content)){ @@ -285,12 +307,14 @@ ids += reassign.getId() + ","; } ids = ids.substring(0, ids.length() - 1); - systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid); - //开始支付 - if(null != reassign.getPayType()){ - if(reassign.getPayType() == 1){//微信支付 - String[] split1 = ids.split(","); + + if(newDriverId == null) { + systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid); + //开始支付 + if (null != reassign.getPayType()) { + if (reassign.getPayType() == 1) {//微信支付 + String[] split1 = ids.split(","); // Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 9, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId()); // if(map.get("code").equals("200")){ // for(String id : split1){ @@ -300,9 +324,9 @@ // }else{ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } - } - if(reassign.getPayType() == 2){//支付宝 - String[] split1 = ids.split(","); + } + if (reassign.getPayType() == 2) {//支付宝 + String[] split1 = ids.split(","); // Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 10, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/aliReassign", "", 2, ""); // if(map.get("code").equals("200")){ // for(String id : split1){ @@ -312,49 +336,258 @@ // }else{ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } + } + if (reassign.getPayType() == 3) {//余额 + for (String id : split) { + Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1); + query.setState(2); + query.setPayTime(new Date()); + reassignMapper.updateById(query); + //添加交易明细 + transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, 3, Integer.valueOf(id)); + } + Double balance = driver.getBalance(); + if (null == balance || balance < totalMoney) { + throw new SystemException("账户余额不足"); + } + driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(totalMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + + + //修改改派通知状态 + for (String id : split) { + OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id); + orderCrossCity.setOldState(orderCrossCity.getState()); + orderCrossCity.setState(11); + orderCrossCity.setReassignNotice(2); + orderCrossCityService.updateById(orderCrossCity); + + //添加已收入明细 + incomeService.saveData(1, orderCrossCity.getCompanyId(), 4, orderCrossCity.getId(), 3, reassign.getMoney()); + } + systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid); + //开始推送调度单 + Map<String, String> map = new HashMap<>(); + map.put("orderId", reassign.getOrderId().toString()); + map.put("orderType", reassign.getOrderType().toString()); + List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1); + for (Dispatch dispatch : dispatches) { + jgPushUtil.push(2, "有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); + } + } } - if(reassign.getPayType() == 3){//余额 - for(String id : split){ - Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1); - query.setState(2); - query.setPayTime(new Date()); - reassignMapper.updateById(query); - //添加交易明细 - transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, 3, Integer.valueOf(id)); + }else { + //开始支付 + if (null != reassign.getPayType()) { + if (reassign.getPayType() == 1) {//微信支付 + String[] split1 = ids.split(","); +// Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 9, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId()); +// if(map.get("code").equals("200")){ +// for(String id : split1){ +// paymentRecordService.saveData(1, uid, 2, Integer.valueOf(id), 3, 1, aDouble, map.get("order_id"), 1);//添加预支付数据 +// } +// resultUtil = ResultUtil.success(map.get("data")); +// }else{ +// resultUtil = ResultUtil.error(map.get("msg"), ""); +// } } - Double balance = driver.getBalance(); - if(null == balance || balance < totalMoney){ - throw new SystemException("账户余额不足"); + if (reassign.getPayType() == 2) {//支付宝 + String[] split1 = ids.split(","); +// Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 10, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/aliReassign", "", 2, ""); +// if(map.get("code").equals("200")){ +// for(String id : split1){ +// paymentRecordService.saveData(1, uid, 2, Integer.valueOf(id), 3, 2, aDouble, map.get("order_id"), 1);//添加预支付数据 +// } +// resultUtil = ResultUtil.success(map.get("data")); +// }else{ +// resultUtil = ResultUtil.error(map.get("msg"), ""); +// } } - driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(totalMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); + if (reassign.getPayType() == 3) {//余额 + for (String id : split) { + Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1); + query.setState(2); + query.setPayTime(new Date()); + reassignMapper.updateById(query); + //添加交易明细 + transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, 3, Integer.valueOf(id)); + } + Double balance = driver.getBalance(); + if (null == balance || balance < totalMoney) { + throw new SystemException("账户余额不足"); + } + driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(totalMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); - //修改改派通知状态 - for(String id : split){ - OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id); - orderCrossCity.setOldState(orderCrossCity.getState()); - orderCrossCity.setState(11); - orderCrossCity.setReassignNotice(2); - orderCrossCityService.updateById(orderCrossCity); + //修改改派通知状态 + for (String id : split) { + OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id); + orderCrossCity.setOldState(orderCrossCity.getState()); + orderCrossCity.setState(11); + orderCrossCity.setReassignNotice(2); + orderCrossCityService.updateById(orderCrossCity); - //添加已收入明细 - incomeService.saveData(1, orderCrossCity.getCompanyId(), 4, orderCrossCity.getId(), 3, reassign.getMoney()); - } - systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid); - //开始推送调度单 - Map<String, String> map = new HashMap<>(); - map.put("orderId", reassign.getOrderId().toString()); - map.put("orderType", reassign.getOrderType().toString()); - List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1); - for(Dispatch dispatch : dispatches){ - jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); + //添加已收入明细 + incomeService.saveData(1, orderCrossCity.getCompanyId(), 4, orderCrossCity.getId(), 3, reassign.getMoney()); + } + systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid); + //开始推送调度单 +// Map<String, String> map = new HashMap<>(); +// map.put("orderId", reassign.getOrderId().toString()); +// map.put("orderType", reassign.getOrderType().toString()); +// List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1); +// for (Dispatch dispatch : dispatches) { +// jgPushUtil.push(2, "有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); +// } + + //将所有改派单都给新的司机 + String[] split1 = ids.split(","); + for (String s : split1) { + selectCrossDriver(Integer.valueOf(s), newDriverId); + } + + } } } return resultUtil; } + /** + * 跨城出行订单改派司机 + */ + public Object selectCrossDriver(@RequestParam Integer reassign, @RequestParam Integer driverId) { + //修改原司机信息 + //修改订单 + Reassign tReassign = reassignService.selectById(reassign); + OrderCrossCity tOrderCrossCity = orderCrossCityService.selectById(tReassign.getOrderId()); + Driver oldDriver = driverService.selectById(tReassign.getOriginalDriverId()); + LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(tOrderCrossCity.getLineShiftDriverId()); + lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat() ? + lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber()); + String seat = ""; + String[] split = tOrderCrossCity.getSeatNumber().split(","); + for(String s : split){ + seat += s + ","; + } + seat = lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1); + + //总和大于总座位数的情况 + if(lineShiftDriver.getLaveSeat() + tOrderCrossCity.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()){ + oldDriver.setState(2); + driverService.updateById(oldDriver); + } + + //修改新司机数据 + List<LineShiftDriver> query = lineShiftDriverMapper.queryByDriver(lineShiftDriver.getLineShiftId(), driverId, tOrderCrossCity.getTravelTime()); + LineShiftDriver lineShiftDriver1 = null; + + if(query.size() == 0){ +// return ResultUtil.error("司机没有预约班次"); + CarModel carModel = carModelMapper.selectById(carService.selectById(driverService.selectById(driverId).getCarId()).getCarModelId()); + + LineShiftDriver lineShiftDriver0 = new LineShiftDriver(); + lineShiftDriver0.setLineShiftId(lineShiftDriver.getLineShiftId()); + lineShiftDriver0.setDriverId(driverId); + lineShiftDriver0.setDay(lineShiftDriver.getDay()); + lineShiftDriver0.setTotalSeat(carModel.getSeat() - 1); + lineShiftDriver0.setLaveSeat(carModel.getSeat() - 1); + lineShiftDriver0.setInserTime(new Date()); + String seatNumber = ""; + for(int i = 1; i < carModel.getSeat(); i++){ + seatNumber += i + ","; + } + lineShiftDriver0.setLaveSeatNumber(seatNumber.substring(0, seatNumber.length() - 1)); + + Integer insert = lineShiftDriverMapper.insert(lineShiftDriver0); + lineShiftDriver1 = lineShiftDriver0; + + }else { + lineShiftDriver1 = query.get(0); + + } + if(lineShiftDriver1.getLaveSeat() < tOrderCrossCity.getPeopleNumber()){ + return ResultUtil.runErr("司机车辆剩余座位数不足"); + } + lineShiftDriver1.setLaveSeat(lineShiftDriver1.getLaveSeat() - tOrderCrossCity.getPeopleNumber()); + String[] split1 = lineShiftDriver1.getLaveSeatNumber().split(","); + String seat1 = "";//使用 + String seat2 = "";//未使用 + for(int i = 0; i < tOrderCrossCity.getPeopleNumber(); i++){ + seat1 += split1[i] + ","; + } + for(int i = tOrderCrossCity.getPeopleNumber(); i < split1.length; i++){ + seat2 += split1[i] + ","; + } + lineShiftDriver1.setLaveSeatNumber(seat2); + lineShiftDriverMapper.updateById(lineShiftDriver1); + Driver driver = driverService.selectById(driverId); +// if(driver.getState() == 1){ +// return ResultUtil.error("司机还未上班呢"); +// } +// if(driver.getState() == 2){ +// driver.setState(3); +// } + + //修改订单数据 + tOrderCrossCity.setDriverId(driverId); + tOrderCrossCity.setCarId(driver.getCarId()); + tOrderCrossCity.setSeatNumber(seat1); + tOrderCrossCity.setState(tOrderCrossCity.getOldState()); + tOrderCrossCity.setLineShiftDriverId(lineShiftDriver1.getId()); + tOrderCrossCity.setOldState(null); + tOrderCrossCity.setIsReassign(2); + try { + tOrderCrossCity.setOrderNum(orderCrossCityService.getOrderNum(driverId, tOrderCrossCity.getLineShiftDriverId())); + } catch (Exception e) { + e.printStackTrace(); + } + orderCrossCityService.updateAllColumnById(tOrderCrossCity); + + //修改专车改派订单 + tReassign.setNowDriverId(driverId); + tReassign.setNowCarId(driver.getCarId()); + tReassign.setState(3); + tReassign.setCompleteTime(new Date()); + reassignService.updateById(tReassign); + + //修改收入明细,转给新司机(因为是先支付金额) + List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("userType", 2).eq("objectId", oldDriver.getId()).eq("type", 2).eq("incomeId", tReassign.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); + //增加推送 +// Map<String,String> map = new HashMap<>(); +// map.put("orderId", tOrderCrossCity.getId().toString()); +// map.put("orderType", "3"); + String result = orderController.pushOrderState(tOrderCrossCity.getId(), 3); +// String result = HttpRequestUtil.postRequest(PushURL.order_push_url, map); + System.out.println("跨城出行改派:【orderId="+tOrderCrossCity.getId().toString()+"】,调用接口:"+result); + return result; + } -- Gitblit v1.7.1