From ca73af429b960124ab9b32ccfd5572e3f1df2bc2 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 22 十月 2025 18:10:04 +0800
Subject: [PATCH] 添加后台改派司机校验
---
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 875 ++++++++++++++++++++++++++++++++-------------------------
1 files changed, 493 insertions(+), 382 deletions(-)
diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 20e4ff9..4b804dd 100644
--- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -25,6 +25,8 @@
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
@@ -35,6 +37,7 @@
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
+import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@@ -54,6 +57,8 @@
@Service
public class OrderPrivateCarServiceImpl extends ServiceImpl<OrderPrivateCarMapper, OrderPrivateCar> implements IOrderPrivateCarService {
+
+ Logger logger = LoggerFactory.getLogger(OrderPrivateCarServiceImpl.class);
@Resource
private OrderPrivateCarMapper orderPrivateCarMapper;
@@ -153,6 +158,9 @@
@Autowired
private GDMapElectricFenceUtil gdMapElectricFenceUtil;
+
+ @Autowired
+ private GeodesyUtil geodesyUtil;
@Autowired
private IOrderPositionService orderPositionService;
@@ -169,10 +177,10 @@
private IOpenCityService openCityService;
@Autowired
private IServerCarModelService serverCarModelService;
-// @Autowired
-// private ALiSendSms aLiSendSms;
-
-
+ @Autowired
+ private IAppOpenInfoService appOpenInfoService;
+ @Resource
+ private UserInfoMapper userInfoMapper;
@Value("${filePath}")
private String filePath;
@@ -186,6 +194,12 @@
@Value("${pushMinistryOfTransport}")
private boolean pushMinistryOfTransport;
+
+ @Autowired
+ private IAppOperationLogService appOperationLogService;
+
+ @Resource
+ private DriverMapper driverMapper;
@@ -207,302 +221,327 @@
* @throws Exception
*/
@Override
- public synchronized ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat,
- String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid,
- BigDecimal estimatedPrice,String cityCode,Integer carIndex) throws Exception {
-
- //如果出行时间大于当前10分钟则默认为预约单
- if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){
- reservation = 2;
+ public ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat,
+ String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid,
+ BigDecimal estimatedPrice, String cityCode, Integer carIndex) throws Exception {
+ String k = "addOrder" + uid;
+ boolean b = redisUtil.hasKey(k);
+ if(b){
+ return ResultUtil.error("不能重复下单");
}
+ redisUtil.setStrValue(k, UUIDUtil.getRandomCode(), 30);
- /**
- * 1.下了即时单就不能下预约单和即时单
- * 2.下了预约单和再下一张即时单不能再下预约单
- */
- List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 11);
- if(orderPrivateCars.size() > 0){
- return ResultUtil.error("有未完成的订单");
- }
- List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 11);
- if(list.size() > 0){
- return ResultUtil.error("有未完成的订单");
- }
-
- orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11);
- if(orderPrivateCars.size() > 0 && reservation == 2){
- return ResultUtil.error("有未完成的订单");
- }
-
- orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 7,12);
- if(orderPrivateCars.size() > 0){
- BaseWarpper baseWarpper = new BaseWarpper();
- baseWarpper.setState(7);
- baseWarpper.setId(orderPrivateCars.get(0).getId());
- return ResultUtil.success(baseWarpper);
- }
-
-
- list = orderTaxiMapper.queryByState_(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11);
- if(list.size() > 0 && reservation == 2){
- return ResultUtil.error("有未完成的订单");
- }
-
- startAddress = startAddress.replaceAll("& #40;", "(");
- startAddress = startAddress.replaceAll("& #41;", ")");
- endAddress = endAddress.replaceAll("& #40;", "(");
- endAddress = endAddress.replaceAll("& #41;", ")");
- if((orderSource == 1 || orderSource == 3) && null == serverCarModelId){
- return ResultUtil.error("请选择服务车型");
- }
-
- OrderPrivateCar orderPrivateCar = new OrderPrivateCar();
- orderPrivateCar.setType(type);
- orderPrivateCar.setUserId(uid);
- orderPrivateCar.setServerCarModelId(serverCarModelId);
- orderPrivateCar.setOrderNum(this.getOrderNum());
- orderPrivateCar.setPlacementLon(Double.valueOf(placementLon));
- orderPrivateCar.setPlacementLat(Double.valueOf(placementLat));
- Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat);
- orderPrivateCar.setPlacementAddress(geocode.get("address"));
- orderPrivateCar.setStartLon(Double.valueOf(startLon));
- orderPrivateCar.setStartLat(Double.valueOf(startLat));
- orderPrivateCar.setStartAddress(startAddress);
- orderPrivateCar.setEndLon(Double.valueOf(endLon));
- orderPrivateCar.setEndLat(Double.valueOf(endLat));
- orderPrivateCar.setEndAddress(endAddress);
- orderPrivateCar.setSubstitute(instead);
- orderPrivateCar.setPassengers(name);
- orderPrivateCar.setPassengersPhone(phone);
- if(instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())){
- UserInfo userInfo = userInfoService.selectById(uid);
- if(ToolUtil.isEmpty(userInfo.getPhone())){
- return ResultUtil.error("请先绑定手机号码");
- }
- orderPrivateCar.setPassengers(userInfo.getName());
- orderPrivateCar.setPassengersPhone(userInfo.getPhone());
- }
- orderPrivateCar.setState(1);
- orderPrivateCar.setInsertTime(new Date());
- orderPrivateCar.setTravelTime(travelTime);
- orderPrivateCar.setOrderType(reservation);
- orderPrivateCar.setOrderSource(orderSource);
- orderPrivateCar.setEstimatedPrice(estimatedPrice);
- if(orderSource == 2){//扫码下单
- Driver driver = driverService.selectById(driverId);
- 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> query = driverServiceService.query(driverId, 1);
- if(query.size() == 0){
- return ResultUtil.error("该司机不能服务此业务");
+ try {
+ long timeMillis = System.currentTimeMillis();
+ //如果出行时间大于当前10分钟则默认为预约单
+ if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){
+ reservation = 2;
}
- orderPrivateCar.setDriverId(driverId);
- orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : (
- driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1));
- orderPrivateCar.setState(2);
- orderPrivateCar.setCarId(driver.getCarId());
- CarService query1 = carServiceMapper.query(1, driver.getCarId());
- orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
- orderPrivateCar.setSnatchOrderTime(new Date());
- driver.setState(3);
- driverService.updateById(driver);
- }
-
- // 查询城市的订单额度
- OpenCity openCity = openCityService.selectOne(new EntityWrapper<OpenCity>()
- .eq("code", cityCode)
- .ne("flag", 3)
- .orderBy("orderMagnitude", false)
- .last("LIMIT 1"));
- // 查询预估价格
- ResultUtil<List<ServerCarModelWarpper>> listResultUtil = serverCarModelService.queryServerCarModel(startLon + "," + startLat, endLon + "," + endLat, 1);
- List<ServerCarModelWarpper> data = listResultUtil.getData();
- data = data.stream().filter(e -> serverCarModelId.equals(e.getId())).sorted(Comparator.comparing(ServerCarModelWarpper::getAmount)).collect(Collectors.toList());
- if(Objects.nonNull(openCity) && !CollectionUtils.isEmpty(data) && BigDecimal.valueOf(data.get(0).getAmount()).compareTo(openCity.getOrderMagnitude()) > 0){
- orderPrivateCar.setIsReassign(1);
- orderPrivateCar.setIsDelete(1);
- orderPrivateCar.setState(7);
- if(orderSource == 2){
- orderPrivateCar.setOrderMoney(data.get(0).getAmount());
- }else {
- orderPrivateCar.setOrderMoney(data.get(carIndex).getAmount());
+ /**
+ * 1.下了即时单就不能下预约单和即时单
+ * 2.下了预约单和再下一张即时单不能再下预约单
+ */
+ List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 11);
+ if(orderPrivateCars.size() > 0){
+ return ResultUtil.error("有未完成的订单");
}
- orderPrivateCar.setPayMethod(0);
- this.insert(orderPrivateCar);
- BaseWarpper baseWarpper = new BaseWarpper();
- baseWarpper.setId(orderPrivateCar.getId());
- baseWarpper.setState(orderPrivateCar.getState());
- baseWarpper.setPayMethod(0);
- baseWarpper.setAmount(orderPrivateCar.getOrderMoney());
- return ResultUtil.success(baseWarpper);
- }else {
- orderPrivateCar.setIsReassign(1);
- orderPrivateCar.setIsDelete(1);
- orderPrivateCar.setPayMethod(1);
- this.insert(orderPrivateCar);
+// List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 11);
+// if(list.size() > 0){
+// return ResultUtil.error("有未完成的订单");
+// }
- if(orderSource == 2){//扫码下单
- new Thread(new Runnable() {
- @Override
- public void run() {
- pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0);
- pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0);
- pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
- }
- }).start();
+ orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11);
+ if(orderPrivateCars.size() > 0 && reservation == 2){
+ return ResultUtil.error("有未完成的订单");
+ }
+
+ orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 7,12);
+ if(orderPrivateCars.size() > 0){
+ BaseWarpper baseWarpper = new BaseWarpper();
+ baseWarpper.setState(7);
+ baseWarpper.setId(orderPrivateCars.get(0).getId());
+ return ResultUtil.success(baseWarpper);
}
- // TODO: 2021/5/11 修改,根据后台设定的派单范围查询范围内有无司机,将单子指派给距离最近的司机(距离相同随机取),范围内没有司机再进行推单流程
- if(orderPrivateCar.getState() == 1){
- Company query = companyCityService.query(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
- if(null == query){
- return ResultUtil.error("起点暂未企业提供服务");
+// list = orderTaxiMapper.queryByState_(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11);
+// if(list.size() > 0 && reservation == 2){
+// return ResultUtil.error("有未完成的订单");
+// }
+
+ startAddress = startAddress.replaceAll("& #40;", "(");
+ startAddress = startAddress.replaceAll("& #41;", ")");
+ endAddress = endAddress.replaceAll("& #40;", "(");
+ endAddress = endAddress.replaceAll("& #41;", ")");
+ if((orderSource == 1 || orderSource == 3) && null == serverCarModelId){
+ return ResultUtil.error("请选择服务车型");
+ }
+
+ OrderPrivateCar orderPrivateCar = new OrderPrivateCar();
+ orderPrivateCar.setType(type);
+ orderPrivateCar.setUserId(uid);
+ orderPrivateCar.setServerCarModelId(serverCarModelId);
+ orderPrivateCar.setOrderNum(this.getOrderNum());
+ orderPrivateCar.setPlacementLon(Double.valueOf(placementLon));
+ orderPrivateCar.setPlacementLat(Double.valueOf(placementLat));
+ Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat);
+ orderPrivateCar.setPlacementAddress(geocode.get("address"));
+ orderPrivateCar.setStartLon(Double.valueOf(startLon));
+ orderPrivateCar.setStartLat(Double.valueOf(startLat));
+ orderPrivateCar.setStartAddress(startAddress);
+ orderPrivateCar.setEndLon(Double.valueOf(endLon));
+ orderPrivateCar.setEndLat(Double.valueOf(endLat));
+ orderPrivateCar.setEndAddress(endAddress);
+ orderPrivateCar.setSubstitute(instead);
+ orderPrivateCar.setPassengers(name);
+ orderPrivateCar.setPassengersPhone(phone);
+ if(instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())){
+ UserInfo userInfo = userInfoService.selectById(uid);
+ if(ToolUtil.isEmpty(userInfo.getPhone())){
+ return ResultUtil.error("请先绑定手机号码");
}
- AssignOrder assignOrder = assignOrderService.selectOne(new EntityWrapper<AssignOrder>().eq("companyId", query.getId()).eq("type", 1));
- if(null != assignOrder){//配置了指派规则才处理
- boolean lock = redisUtil.lock("order_lock", 10);
- if(!lock){
- int num1 = 1;
- while (num1 <= 10){
- Thread.sleep(3000);//等待3秒
- lock = redisUtil.lock("order_lock", 10);
- if(lock){
- break;
- }else{
- num1++;
- }
+ orderPrivateCar.setPassengers(userInfo.getName());
+ orderPrivateCar.setPassengersPhone(userInfo.getPhone());
+ }
+ orderPrivateCar.setState(1);
+ orderPrivateCar.setInsertTime(new Date());
+ orderPrivateCar.setTravelTime(travelTime);
+ orderPrivateCar.setOrderType(reservation);
+ orderPrivateCar.setOrderSource(orderSource);
+ Driver driver2 = driverService.selectById(driverId);
+ if(orderSource == 2){//扫码下单
+ if(null == driver2){
+ return ResultUtil.error("司机信息有误,无法完成下单");
+ }
+ if(driver2.getAuthState() == 1){
+ return ResultUtil.error("司机信息还未完成审核,无法完成下单");
+ }
+ if(driver2.getAuthState() == 3){
+ return ResultUtil.error("司机账户已被冻结,无法提供服务");
+ }
+ if(driver2.getAuthState() == 4){
+ return ResultUtil.error("司机信息未通过审核,无法提供服务");
+ }
+ if(driver2.getState() == 1){
+ return ResultUtil.error("司机还未上线,无法提供服务");
+ }
+ if(driver2.getState() == 3){
+ return ResultUtil.error("司机正在服务中,无法提供服务");
+ }
+ List<DriverService> query = driverServiceService.query(driverId, 1);
+ if(query.size() == 0){
+ return ResultUtil.error("该司机不能服务此业务");
+ }
+
+ orderPrivateCar.setDriverId(driverId);
+ orderPrivateCar.setCompanyId(driver2.getFranchiseeId() != null && driver2.getFranchiseeId() != 0 ? driver2.getFranchiseeId() : (
+ driver2.getCompanyId() != null && driver2.getCompanyId() != 0 ? driver2.getCompanyId() : 1));
+ orderPrivateCar.setState(2);
+ orderPrivateCar.setCarId(driver2.getCarId());
+ CarService query1 = carServiceMapper.query(1, driver2.getCarId());
+ orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
+ orderPrivateCar.setSnatchOrderTime(new Date());
+ driver2.setState(3);
+ driverService.updateById(driver2);
+ serverCarModelId = query1.getServerCarModelId();
+ }
+ long timeMillis1 = System.currentTimeMillis();
+ logger.info("第一段用时:" + (timeMillis1 - timeMillis));
+ timeMillis = timeMillis1;
+ // 查询城市的订单额度
+ OpenCity openCity = openCityService.selectOne(new EntityWrapper<OpenCity>()
+ .eq("code", cityCode)
+ .ne("flag", 3)
+ .orderBy("orderMagnitude", false)
+ .last("LIMIT 1"));
+ if(Objects.isNull(openCity)){
+ String city = cityCode.substring(0, 4) + "00";
+ openCity = openCityService.selectOne(new EntityWrapper<OpenCity>()
+ .eq("code", city)
+ .ne("flag", 3)
+ .orderBy("orderMagnitude", false)
+ .last("LIMIT 1"));
+ }
+
+ // 查询预估价格
+ ResultUtil<ServerCarModelWarpper> listResultUtil = serverCarModelService.queryServerCarModel1(serverCarModelId, startLon + "," + startLat, endLon + "," + endLat, 1);
+ if(200 != listResultUtil.getCode()){
+ return ResultUtil.error(listResultUtil.getMsg());
+ }
+ ServerCarModelWarpper data = listResultUtil.getData();
+ if(Objects.nonNull(openCity) && BigDecimal.valueOf(data.getAmount()).compareTo(openCity.getOrderMagnitude()) > 0){
+ orderPrivateCar.setIsReassign(1);
+ orderPrivateCar.setIsDelete(1);
+ orderPrivateCar.setState(7);
+ orderPrivateCar.setOrderMoney(data.getAmount());
+ orderPrivateCar.setEstimatedPrice(data.getAmount());
+ orderPrivateCar.setPayMethod(0);
+ this.insert(orderPrivateCar);
+
+ appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户下单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
+
+ BaseWarpper baseWarpper = new BaseWarpper();
+ baseWarpper.setId(orderPrivateCar.getId());
+ baseWarpper.setState(orderPrivateCar.getState());
+ baseWarpper.setPayMethod(0);
+ baseWarpper.setAmount(orderPrivateCar.getOrderMoney());
+ return ResultUtil.success(baseWarpper);
+ }else {
+ orderPrivateCar.setEstimatedPrice(data.getAmount());
+ orderPrivateCar.setIsReassign(1);
+ orderPrivateCar.setIsDelete(1);
+ orderPrivateCar.setPayMethod(1);
+ this.insert(orderPrivateCar);
+ appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户下单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
+ if(orderSource == 2){//扫码下单
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0);
+ pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0);
+ pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
}
+ }).start();
+ }
+ long timeMillis2 = System.currentTimeMillis();
+ logger.info("第二段用时:" + (timeMillis2 - timeMillis));
+ timeMillis = timeMillis2;
+
+ // TODO: 2021/5/11 修改,根据后台设定的派单范围查询范围内有无司机,将单子指派给距离最近的司机(距离相同随机取),范围内没有司机再进行推单流程
+ if(orderPrivateCar.getState() == 1){
+ Company query = companyCityService.query(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
+ if(null == query){
+ return ResultUtil.error("起点暂未企业提供服务");
}
- try {
- //获取空闲司机
- List<Driver> drivers = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), assignOrder.getDistance(), null);//获取范围内空闲司机
- List<Integer> driverIds = drivers.stream().map(Driver::getId).collect(Collectors.toList());
- if(drivers.size() > 0) {//有司机,直接指派给司机
- Driver dr = null;
- if (drivers.size() > 1) {
- List<Driver> ds = new ArrayList<>();//存储直线距离最近的几个司机
- for (int i = 0; i < assignOrder.getPeople(); i++) {
- Driver driver = null;
- int m = 0;
- int index = 0;
+ AssignOrder assignOrder = assignOrderService.selectOne(new EntityWrapper<AssignOrder>().eq("companyId", query.getId()).eq("type", 1));
+ if(null != assignOrder){//配置了指派规则才处理
+ boolean lock = redisUtil.lock("order_lock", 10, 30);
+ if(!lock){
+ return ResultUtil.error("系统繁忙,请稍后重试");
+ }
+ try {
+ //获取空闲司机
+ List<Driver> drivers = driverMapper.queryIdleDriver_(1, serverCarModelId, null);
+ List<Integer> driverIds = drivers.stream().map(Driver::getId).collect(Collectors.toList());
+ logger.info("指派的空闲司机【" + orderPrivateCar.getOrderNum() + "】:" + JSON.toJSONString(drivers));
+ if(drivers.size() > 0) {//有司机,直接指派给司机
+ Driver dr = null;
+ if (drivers.size() > 1) {
+ List<Driver> ds = new ArrayList<>();
+ double dis = assignOrder.getDistance() * 1000;
// 查询预约单
List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11);
List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList());
for (int j = 0; j < drivers.size(); j++) {
Driver driver1 = drivers.get(j);
- if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) {
+ driver1.setDistance(0D);
+ if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver1.getId())) {
+ continue;
+ }
+ // 判断司机是否有订单进行中
+ long count = orderPrivateCarMapper.selectCount(new EntityWrapper<OrderPrivateCar>().eq("driverId", driver1.getId())
+ .in("state", Arrays.asList(2, 3, 4, 5, 6, 11)).eq("isDelete", 1));
+ if(count > 0){
continue;
}
// 判断该司机是否有30分钟内预约单
- long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) &&
+ count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) &&
DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count();
if (count > 0) {
continue;
}
String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId());
if (null != value) {
-// Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 0);//计算距离
-// Integer d = Integer.valueOf(distance1.get("distance"));
- String[] split = value.split(",");
- double distance = GDMapGeocodingUtil.getDistance(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0]));
- int d = Double.valueOf(distance).intValue();
- if ((0 == m && null == driver) || (d < m)) {
- driver = drivers.get(j);
- m = d;
- index = j;
+ Map<String, String> distance = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1);
+ double d = Double.parseDouble(distance.get("distance"));
+ logger.info("指派推单,司机距离【" + orderPrivateCar.getOrderNum() + "】" + driver1.getPhone() + ":" + d);
+ if(dis >= d){
+ driver1.setDistance(d);
+ ds.add(driver1);
}
}
}
- ds.add(driver);
- drivers.remove(index);
+ if(!ds.isEmpty()){
+ ds.sort(new Comparator<Driver>() {
+ @Override
+ public int compare(Driver o1, Driver o2) {
+ return o1.getDistance().compareTo(o2.getDistance());
+ }
+ });
+ logger.info("指派推单,符合条件的司机【" + orderPrivateCar.getOrderNum() + "】:" + JSON.toJSONString(ds));
+ appOperationLogService.addAppOperationLog(uid, "{\"type\":\"指派推单,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(ds) + "\"}");
+ dr = ds.get(0);
+ }
+ } else {
+ List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11);
+ if (orderPrivateCarss.size() == 0) {
+ dr = drivers.get(0);
+ }
+ logger.info("指派推单,符合条件的司机【" + orderPrivateCar.getOrderNum() + "】:" + JSON.toJSONString(dr));
+ appOperationLogService.addAppOperationLog(uid, "{\"type\":\"指派推单,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(dr) + "\"}");
}
- //再根据直线距离最短的司机中找出行驶距离最短的司机
- Integer m = 0;
- for (Driver driver : ds) {
- String value = redisUtil.getValue("DRIVER" + driver.getId());
- if (null != value) {
- Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1);//计算距离
- Integer d = Integer.valueOf(distance1.get("distance"));
- if ((0 == m && null == dr) || (d.intValue() < m.intValue())) {
- dr = driver;
- m = d;
+ if (Objects.nonNull(dr)) {
+ orderPrivateCar.setDriverId(dr.getId());
+ orderPrivateCar.setCompanyId(dr.getFranchiseeId() != null && dr.getFranchiseeId() != 0 ? dr.getFranchiseeId() : (
+ dr.getCompanyId() != null && dr.getCompanyId() != 0 ? dr.getCompanyId() : 1));
+ orderPrivateCar.setState(2);
+ orderPrivateCar.setCarId(dr.getCarId());
+ CarService query1 = carServiceMapper.query(1, dr.getCarId());
+ orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
+ orderPrivateCar.setSnatchOrderTime(new Date());
+ if (orderPrivateCar.getOrderType() != 2) {
+ dr.setState(3);
+ }
+ driverService.updateById(dr);
+ redisUtil.setStrValue("DRIVER_ORDER" + dr.getId(), orderPrivateCar.getId().toString(), 600);
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0);
+ pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0);
+ pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
}
- }
+ }).start();
}
- } else {
- List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11);
- if (orderPrivateCarss.size() == 0) {
- dr = drivers.get(0);
- }
- }
+ this.updateById(orderPrivateCar);
- if (Objects.nonNull(dr)) {
- orderPrivateCar.setDriverId(dr.getId());
- orderPrivateCar.setCompanyId(dr.getFranchiseeId() != null && dr.getFranchiseeId() != 0 ? dr.getFranchiseeId() : (
- dr.getCompanyId() != null && dr.getCompanyId() != 0 ? dr.getCompanyId() : 1));
- orderPrivateCar.setState(2);
- orderPrivateCar.setCarId(dr.getCarId());
- CarService query1 = carServiceMapper.query(1, dr.getCarId());
- orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
- orderPrivateCar.setSnatchOrderTime(new Date());
- if (orderPrivateCar.getOrderType() != 2) {
- dr.setState(3);
- }
- driverService.updateById(dr);
- new Thread(new Runnable() {
- @Override
- public void run() {
- pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0);
- pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0);
- pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
- }
- }).start();
- }
- this.updateById(orderPrivateCar);
-
- //发送短信给司机
+ //发送短信给司机
// aLiSendSms.sendSms(dr.getPhone(), "SMS_216832951", "{\"" + orderPrivateCar.getStartAddress() + "\"}");
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }finally {
+ redisUtil.unlock("order_lock");
}
- }catch (Exception e){
- e.printStackTrace();
- }finally {
- redisUtil.unlock("order_lock");
}
}
- }
+ long timeMillis3 = System.currentTimeMillis();
+ logger.info("第三段用时:" + (timeMillis3 - timeMillis));
+ timeMillis = timeMillis3;
-
- //推单操作
- if(orderPrivateCar.getState() == 1){
- this.pushOrder(orderPrivateCar);
+ //推单操作
+ if(orderPrivateCar.getState() == 1){
+ this.pushOrder(orderPrivateCar);
+ }
+ //添加消息
+ systemNoticeService.addSystemNotice(1, "您的专车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1);
+ BaseWarpper baseWarpper = new BaseWarpper();
+ baseWarpper.setState(orderPrivateCar.getState());
+ baseWarpper.setId(orderPrivateCar.getId());
+ baseWarpper.setPayMethod(1);
+ long timeMillis4 = System.currentTimeMillis();
+ logger.info("第四段用时:" + (timeMillis4 - timeMillis));
+ timeMillis = timeMillis4;
+ return ResultUtil.success(baseWarpper);
}
- //添加消息
- systemNoticeService.addSystemNotice(1, "您的专车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1);
- BaseWarpper baseWarpper = new BaseWarpper();
- baseWarpper.setState(orderPrivateCar.getState());
- baseWarpper.setId(orderPrivateCar.getId());
- baseWarpper.setPayMethod(1);
- return ResultUtil.success(baseWarpper);
+ }catch (Exception e){
+ e.printStackTrace();
+ }finally {
+ redisUtil.remove(k);
}
+ return ResultUtil.error("下单失败");
}
// @Override
@@ -891,7 +930,10 @@
if(null == orderPrivateCar){
return ResultUtil.error("取消订单失败,订单信息有误");
}
- if(orderPrivateCar.getState() > 5 && orderPrivateCar.getState() != 11){
+ if(orderPrivateCar.getPayMethod() == 0 && (Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney()>0) && orderPrivateCar.getState() > 5 && orderPrivateCar.getState() != 11){
+ return ResultUtil.error("取消订单失败,当前状态无法取消");
+ }
+ if(orderPrivateCar.getPayMethod() == 1 && orderPrivateCar.getState() > 5 && orderPrivateCar.getState() != 11){
return ResultUtil.error("取消订单失败,不合法的操作");
}
if(null == orderPrivateCar.getDriverId()){//没有接单的情况
@@ -913,6 +955,26 @@
integer = orderCancelService.saveData(id, 1, "无司机接单", "无司机接单", null, null, 2, 1, uid);
orderPrivateCar.setState(10);
this.updateById(orderPrivateCar);
+ if (orderPrivateCar.getPayMethod() == 0 && (Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney()>0)) {
+ // 退款
+ if (orderPrivateCar.getPayType() == 1 && orderPrivateCar.getOrderMoney() != 0) {//微信退款
+ // 微信退款
+ payMoneyUtil.wxRefund(orderPrivateCar.getTransactionId(), orderPrivateCar.getOrderNum(), String.valueOf(orderPrivateCar.getPaymentAdvanceMoney()), String.valueOf(new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney())), "/base/transferWXNotify");
+// orderPrivateCar.setPayMoney(new BigDecimal(orderPrivateCar.getOrderMoney()).doubleValue());
+ }
+ if (orderPrivateCar.getPayType() == 2 && orderPrivateCar.getOrderMoney() != 0) {//支付宝退款
+ // 支付宝退款
+ payMoneyUtil.aliRefund(orderPrivateCar.getTransactionId(), String.valueOf(new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney()).multiply(new BigDecimal(100))));
+// orderPrivateCar.setPayMoney(new BigDecimal(orderPrivateCar.getOrderMoney()).doubleValue());
+ }
+ if (orderPrivateCar.getPayType() == 3 && orderPrivateCar.getOrderMoney() != 0) {//余额支付
+ BigDecimal refundMoney = new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney());
+ // 余额退款
+ UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId());
+ userInfo.setBalance(new BigDecimal(userInfo.getBalance()).add(refundMoney).doubleValue());
+ userInfoMapper.updateById(userInfo);
+ }
+ }
}
}else {
CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
@@ -926,7 +988,28 @@
orderPrivateCar.setState(10);
this.updateById(orderPrivateCar);
+ if (orderPrivateCar.getPayMethod() == 0 && (Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney()>0)) {
+ // 退款
+ if (orderPrivateCar.getPayType() == 1 && orderPrivateCar.getOrderMoney() != 0) {//微信退款
+ // 微信退款
+ payMoneyUtil.wxRefund(orderPrivateCar.getTransactionId(), orderPrivateCar.getOrderNum(), String.valueOf(orderPrivateCar.getPaymentAdvanceMoney()), String.valueOf(new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney())), "/base/transferWXNotify");
+// orderPrivateCar.setPayMoney(new BigDecimal(orderPrivateCar.getOrderMoney()).doubleValue());
+ }
+ if (orderPrivateCar.getPayType() == 2 && orderPrivateCar.getOrderMoney() != 0) {//支付宝退款
+ // 支付宝退款
+ payMoneyUtil.aliRefund(orderPrivateCar.getTransactionId(), String.valueOf(new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney()).multiply(new BigDecimal(100))));
+// orderPrivateCar.setPayMoney(new BigDecimal(orderPrivateCar.getOrderMoney()).doubleValue());
+ }
+ if (orderPrivateCar.getPayType() == 3 && orderPrivateCar.getOrderMoney() != 0) {//余额支付
+ BigDecimal refundMoney = new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney());
+ // 余额退款
+ UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId());
+ userInfo.setBalance(new BigDecimal(userInfo.getBalance()).add(refundMoney).doubleValue());
+ userInfoMapper.updateById(userInfo);
+ }
+ }
}
+ appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户取消订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
this.deleteTask(id);//删除定时任务
new Thread(new Runnable() {
@@ -973,18 +1056,9 @@
*/
@Override
public ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception {
- boolean lock = redisUtil.lock(id + "_cancleOrder", 10);
+ boolean lock = redisUtil.lock(id + "_cancleOrder", 10, 30);
if(!lock){
- int num1 = 1;
- while (num1 <= 10){
- Thread.sleep(3000);//等待3秒
- lock = redisUtil.lock(id + "_cancleOrder", 10);
- if(lock){
- break;
- }else{
- num1++;
- }
- }
+ return ResultUtil.error("系统繁忙,请稍后重试");
}
ResultUtil resultUtil = ResultUtil.success("");
try {
@@ -1108,13 +1182,13 @@
Company company = companyService.selectById(orderPrivateCar.getCompanyId());
Double taxi = company.getSpeMoney();
BigDecimal c =new BigDecimal(query.getMoney());//司机收入
- incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue());
Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driverService.updateById(driver);
-
+ incomeService.saveDriverData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue(),driver.getLaveBusinessMoney());
+
this.deleteTask(id);//删除定时任务
// new Thread(new Runnable() {
@@ -1158,7 +1232,11 @@
for(int i = 1; i <= querys.size(); i++){
PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0);
//获取空闲司机
+// List<Driver> list = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
List<Driver> list = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
+ List<Driver> list1 = driverService.queryIdleDriver_(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), 2.0D, null);//所有附近空闲司机
+ list.addAll(list1);
+ list = list.stream().distinct().collect(Collectors.toList());
if(list.size() > 0){
// 查询预约单
List<Integer> driverIds = list.stream().map(Driver::getId).collect(Collectors.toList());
@@ -1167,14 +1245,15 @@
double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
list = list.subList(0, lastIndex);//获取空闲司机中占比数据
+
+ appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"范围推单,第" + i +"轮,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(list) + "\"}");
for(Driver driver : list){//开始进行推送
// 判断该司机是否有30分钟内预约单
long count = orderPrivateCars.stream().filter(orderPrivateCar1 -> driver.getId().equals(orderPrivateCar1.getDriverId())
- && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())
- && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).isAfter(LocalDateTime.now())).count();
- if(orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())){
- continue;
- }
+ && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count();
+// if(orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())){
+// continue;
+// }
if(count > 0){
continue;
}
@@ -1200,13 +1279,32 @@
pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
orderIds.remove(orderPrivateCar.getId());
+
// 第三轮取消订单
orderPrivateCar.setState(10);
orderPrivateCarMapper.updateById(orderPrivateCar);
+
+ appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"范围推单结束,无司机接单,自动取消订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
+ pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
// 添加站内信
systemNoticeService.addSystemNotice(1, "当前区域未能及时为您匹配到合适车辆。为避免耽误您的行程,系统已自动取消订单,建议您稍后重新尝试。", orderPrivateCar.getUserId(), 1);
- // TODO 0731 添加短信发送
-
+ // 查询是否开启短信通知
+ AppOpenInfo appOpenInfo = appOpenInfoService.selectOne(new EntityWrapper<AppOpenInfo>()
+ .eq("type", 3));
+ if(Objects.nonNull(appOpenInfo) && appOpenInfo.getIsOpen() == 1){
+ // 添加短信发送
+ //发送记录集合
+ JSONArray records = new JSONArray();
+ JSONObject record = new JSONObject();
+ UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+ //手机号
+ record.put("mobile", userInfo.getPhone());
+ //替换变量
+ JSONObject param = new JSONObject();
+ record.put("tpContent", param);
+ records.add(record);
+ SMSUtil.sendSmsTp(380702L, records);
+ }
}
}
} catch (Exception e) {
@@ -1304,19 +1402,15 @@
@Override
public ResultUtil payPrivateCarOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception {
- boolean lock = redisUtil.lock(orderId + "_payment", 10);
+ boolean lock = redisUtil.lock(orderId + "_payment", 10, 30);
if(!lock){
- int num1 = 1;
- while (num1 <= 10){
- Thread.sleep(3000);//等待3秒
- lock = redisUtil.lock(orderId + "_payment", 10);
- if(lock){
- break;
- }else{
- num1++;
- }
- }
+ return ResultUtil.error("系统繁忙,请稍后重试");
}
+ String key = orderId + "_during_payment";
+ if(redisUtil.hasKey(key)){
+ return ResultUtil.error("支付中,不能重复发起支付");
+ }
+ redisUtil.setStrValue(key, UUIDUtil.getRandomCode(), 10);
try {
OrderPrivateCar orderPrivateCar = this.selectById(orderId);
if(orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9){
@@ -1326,46 +1420,44 @@
return ResultUtil.error("订单不在待支付状态,不允许支付", "");
}
PaymentRecord query3 = paymentRecordService.query(1, null, null, orderId, 1, null, 1);
- if(null != query3){
- ResultUtil<Map<String, Object>> resultUtil1 = payMoneyUtil.queryWXOrder("", query3.getSerialNumber(), "JSAPI");
- if (resultUtil1.getCode() == 200) {
- /**
- * SUCCESS--支付成功
- * REFUND--转入退款
- * NOTPAY--未支付
- * CLOSED--已关闭
- * REVOKED--已撤销(刷卡支付)
- * USERPAYING--用户支付中
- * PAYERROR--支付失败(其他原因,如银行返回失败)
- * ACCEPT--已接收,等待扣款
- */
- String result_code = resultUtil1.getData().get("result_code").toString();
- if("SUCCESS".equals(result_code)){
- String s = resultUtil1.getData().get("trade_state").toString();
- if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s)) {
- payMoneyUtil.closeWXOrder(query3.getSerialNumber());
- paymentRecordService.deleteById(query3.getId());
- }
- if ("SUCCESS".equals(s) || "ACCEPT".equals(s)) {
- return ResultUtil.error("不允许重复支付");
- }
- if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) {
- payMoneyUtil.closeWXOrder(query3.getSerialNumber());
- paymentRecordService.deleteById(query3.getId());
- }
- }
- }
- }
+// if(null != query3){
+// ResultUtil<Map<String, Object>> resultUtil1 = payMoneyUtil.queryWXOrder("", query3.getSerialNumber(), "JSAPI");
+// if (resultUtil1.getCode() == 200) {
+// /**
+// * SUCCESS--支付成功
+// * REFUND--转入退款
+// * NOTPAY--未支付
+// * CLOSED--已关闭
+// * REVOKED--已撤销(刷卡支付)
+// * USERPAYING--用户支付中
+// * PAYERROR--支付失败(其他原因,如银行返回失败)
+// * ACCEPT--已接收,等待扣款
+// */
+// String result_code = resultUtil1.getData().get("result_code").toString();
+// if("SUCCESS".equals(result_code)){
+// String s = resultUtil1.getData().get("trade_state").toString();
+// if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s)) {
+// payMoneyUtil.closeWXOrder(query3.getSerialNumber());
+// paymentRecordService.deleteById(query3.getId());
+// }
+// if ("SUCCESS".equals(s) || "ACCEPT".equals(s)) {
+// return ResultUtil.error("不允许重复支付");
+// }
+// if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) {
+// payMoneyUtil.closeWXOrder(query3.getSerialNumber());
+// paymentRecordService.deleteById(query3.getId());
+// }
+// }
+// }
+// }
Integer uid = orderPrivateCar.getUserId();
Double orderMoney = orderPrivateCar.getOrderMoney();
- System.out.println("=========================订单金额====================="+orderMoney);
if(Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney() > 0){
double couponMoney1 = Objects.nonNull(orderPrivateCar.getCouponMoney()) ? orderPrivateCar.getCouponMoney() : 0.00;
orderMoney = orderMoney - orderPrivateCar.getPaymentAdvanceMoney() - couponMoney1;
- System.out.println("=========================减去先付后金额====================="+orderMoney);
}
UserInfo userInfo = userInfoService.selectById(uid);
ResultUtil resultUtil = ResultUtil.success(new HashMap<>());
@@ -1428,16 +1520,13 @@
resultUtil = payMoneyUtil.weixinpay("完成订单",orderId +"", code,orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
if(resultUtil.getCode()==200){
paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, null, 1, code);//添加预支付数据
- long millis = System.currentTimeMillis();
+ appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户支付订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
new Thread(()->{
- long time = millis;
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- //订单创建后15分钟
- while ((System.currentTimeMillis() - time) <= 900000) {
+ int num = 1;
+ int wait = 0;
+ while (num <= 13) {
+ int min = 5000;
+ wait += (min * num);
OrderPrivateCar orderPrivateCar1 = OrderPrivateCarServiceImpl.this.selectById(orderId);
if(orderPrivateCar1.getState() != 7){
break;
@@ -1467,12 +1556,17 @@
if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) {
}
}
- Thread.sleep(5000);
}catch (Exception e){
e.printStackTrace();
+ }finally {
+ try {
+ Thread.sleep(wait);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ num++;
}
}
-
OrderPrivateCar orderPrivateCar1 = OrderPrivateCarServiceImpl.this.selectById(orderId);
if(7 == orderPrivateCar1.getState()){
//关闭订单,不允许支付
@@ -1503,13 +1597,14 @@
userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
- SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
- userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
-
+// SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
+// if(Objects.nonNull(query1)){
+// userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
+// }
+
//添加交易明细
transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 1, orderId);
- userInfoService.updateById(userInfo);
-
+
// orderPrivateCar.setState(8);
orderPrivateCar.setPayType(3);
// orderPrivateCar.setPayMoney(orderMoney);
@@ -1532,6 +1627,11 @@
if(Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney() > 0){
orderPrivateCar.setPayMoney(new BigDecimal(orderMoney).add(new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney())).doubleValue());
orderPrivateCar.setOrderMoney(orderPrivateCar.getPayMoney());
+
+ SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
+ if(Objects.nonNull(query1)){
+ userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
+ }
//添加已收入明细
Company company = companyService.selectById(orderPrivateCar.getCompanyId());
Double speMoney = company.getSpeMoney();
@@ -1550,12 +1650,12 @@
c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
}
incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
- incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driverService.updateById(driver);
+ incomeService.saveDriverData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue(), driver.getLaveBusinessMoney());
orderPrivateCar.setState(8);
}else {
if(orderPrivateCar.getOrderSource() == 2){
@@ -1567,13 +1667,14 @@
orderPrivateCar.setOrderMoney(orderMoney);
orderPrivateCar.setPayMoney(orderMoney);
}
- new Thread(new Runnable() {
- @Override
- public void run() {
- pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
- pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
- }
- }).start();
+// new Thread(new Runnable() {
+// @Override
+// public void run() {
+// pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+// pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+// }
+// }).start();
+ userInfoService.updateById(userInfo);
systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1);
if(orderPrivateCar.getState() == 1){
this.pushOrder(orderPrivateCar);
@@ -1581,6 +1682,7 @@
}else {
// 后付
orderPrivateCar.setPayMoney(orderMoney);
+ orderPrivateCar.setState(8);
if(orderPrivateCar.getIsplatPay()==1){
//添加已收入明细
Company company = companyService.selectById(orderPrivateCar.getCompanyId());
@@ -1600,12 +1702,12 @@
c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
}
incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
- incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driverService.updateById(driver);
+ incomeService.saveDriverData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue(), driver.getLaveBusinessMoney());
}
@@ -1623,7 +1725,8 @@
}
this.updateAllColumnById(orderPrivateCar);
-
+ appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户" + (payType == 1 ? "微信" : payType == 2 ? "支付宝" : "余额") + "支付订单," + (orderPrivateCar.getPayMethod() == 0 ? "先付" : "后付") + "\"" +
+ ",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
new Thread(new Runnable() {
@Override
public void run() {
@@ -1788,12 +1891,12 @@
Company company = companyService.selectById(orderPrivateCar.getCompanyId());
Double taxi = company.getSpeMoney();
BigDecimal c =new BigDecimal(query.getAmount());//司机收入
- incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue());
Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driverService.updateById(driver);
+ incomeService.saveDriverData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue(), driver.getLaveBusinessMoney());
this.deleteTask(orderPrivateCar.getId());//删除定时任务
// TODO: 2020/5/24 这里需要给司机和用户推送订单状态
@@ -1814,21 +1917,10 @@
@Override
@Transactional(rollbackFor = Exception.class)
public synchronized void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception {
- boolean lock = redisUtil.lock(order_id + "_paymentCallback", 10);
+ boolean lock = redisUtil.lock(order_id + "_paymentCallback", 10, 30);
if(!lock){
- int num1 = 1;
- while (num1 <= 10){
- Thread.sleep(3000);//等待3秒
- lock = redisUtil.lock(order_id + "_paymentCallback", 10);
- if(lock){
- break;
- }else{
- num1++;
- }
- }
+ return;
}
-
-
try {
PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), 1, type, null);
if(null != query){
@@ -1840,13 +1932,15 @@
transactionDetailsService.saveData(orderPrivateCar.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId());
// orderPrivateCar.setState(8);
orderPrivateCar.setPayType(type);
- orderPrivateCar.setTransactionId(order_id);
+ if(!StringUtils.hasLength(orderPrivateCar.getTransactionId())){
+ orderPrivateCar.setTransactionId(order_id);
+ }
this.updateById(orderPrivateCar);
- UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
- SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
- userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
- userInfoService.updateById(userInfo);
+// UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+// SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId());
+// userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
+// userInfoService.updateById(userInfo);
//处理优惠券和红包
if(null != orderPrivateCar.getCouponId()){
@@ -1868,7 +1962,6 @@
// 判断先付还是后付
if(orderPrivateCar.getPayMethod() == 0){
-
if (Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney() > 0 ) {
orderPrivateCar.setState(8);
orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+query.getAmount());
@@ -1891,12 +1984,12 @@
c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
}
incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
- incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driverService.updateById(driver);
+ incomeService.saveDriverData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue(), driver.getLaveBusinessMoney());
}else {
if(orderPrivateCar.getOrderSource() == 2){
orderPrivateCar.setState(2);
@@ -1929,14 +2022,18 @@
c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
}
incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
- incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
driverService.updateById(driver);
+ incomeService.saveDriverData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue(), driver.getLaveBusinessMoney());
}
}
+
+ appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户" + (type == 1 ? "微信" : "支付宝") + "支付订单," + (orderPrivateCar.getPayMethod() == 0 ? "先付" : "后付") + "\"" +
+ ",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}");
+
// TODO: 2020/5/24 这里需要给司机和用户推送订单状态
new Thread(new Runnable() {
@Override
@@ -1999,19 +2096,23 @@
}
if(Integer.valueOf(String.valueOf(map.get("state"))) == 7){
OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId);
- UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(Integer.valueOf(String.valueOf(map.get("companyId"))));
- if(null != query2){
- Integer orderNum=this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("userId",orderPrivateCar.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())"));
- if(query2.getDistance()*1000>orderPrivateCar.getMileage() && query2.getOrderNum()>orderNum){
- Double special = query2.getSpecial();
- orderPrivateCar.setDiscount(special);
- Double orderMoney = orderPrivateCar.getOrderMoney();
- double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
- if(orderMoney.compareTo(v) > 0){
- map.put("discountMoney",orderMoney - v);
+ Object companyId = map.get("companyId");
+ if(Objects.nonNull(companyId)){
+ UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(Integer.valueOf(String.valueOf(map.get("companyId"))));
+ if(null != query2){
+ Integer orderNum=this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("userId",orderPrivateCar.getUserId()).eq("activityId",query2.getId()).last(" and to_days(getoffTime) = to_days(now())"));
+ if(query2.getDistance()*1000>orderPrivateCar.getMileage() && query2.getOrderNum()>orderNum){
+ Double special = query2.getSpecial();
+ orderPrivateCar.setDiscount(special);
+ Double orderMoney = orderPrivateCar.getOrderMoney();
+ double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+ if(orderMoney.compareTo(v) > 0){
+ map.put("discountMoney",orderMoney - v);
+ }
}
}
-
+ }else{
+ map.put("discountMoney",0);
}
}
@@ -2102,6 +2203,16 @@
List<OrderPosition> list = JSONArray.parseArray(sb.toString(), OrderPosition.class);
orderServerWarpper.setOrderPositionList(JSONObject.toJSONString(list));
}
+ // 查询司机服务中的订单
+ OrderPrivateCar one = this.selectOne(new EntityWrapper<OrderPrivateCar>()
+ .eq("driverId", orderPrivateCar.getDriverId())
+ .eq("state", 5)
+ .orderBy("insertTime", false)
+ .last("LIMIT 1"));
+ if(Objects.nonNull(one)){
+ orderServerWarpper.setLastLon(one.getEndLon()+"");
+ orderServerWarpper.setLastLat(one.getEndLat()+"");
+ }
return orderServerWarpper;
}
--
Gitblit v1.7.1