longz
2026-06-15 7e7462d129b81ed8cba5d05e218ae71c38c5efe1
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
@@ -55,6 +55,21 @@
    @Autowired
    private ITDriverService tDriverService;
    @Autowired
    private ITOrderTaxiService tOrderTaxiService;
    @Autowired
    private ITOrderCrossCityService tOrderCrossCityService;
    @Autowired
    private ITCompanyCityService tCompanyCityService;
    @Autowired
    private GDMapGeocodingUtil gdMapGeocodingUtil;
    @Autowired
    private GDMapElectricFenceUtil gdMapElectricFenceUtil;
    
    @Autowired
    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
@@ -596,7 +611,10 @@
    public Object add(TOrderPrivateCar privateCar) {
        TUser user = userService.selectOne(new EntityWrapper<TUser>().eq("phone", privateCar.getPassengersPhone()));
        if (ToolUtil.isNotEmpty(user)) {///  用户是平台用户
            privateCar.setOrderNum("PRIVATE" + String.valueOf(1000000 + privateCar.selectList(null).size() + 1).substring(1));
            if (hasUnfinishedTravelOrder(user.getId())) {
                return new ErrorTip(500, "该乘客有未完成的订单");
            }
            privateCar.setOrderNum(getPrivateCarOrderNum());
            privateCar.setUserId(user.getId());
            privateCar.setState(1);
            privateCar.setInsertTime(DateUtil.parseTime(DateUtil.getTime()));
@@ -619,6 +637,7 @@
            } else {
                privateCar.setOrderType(1);
            }
            fillDispatchPrivateCarOrder(privateCar);
            tOrderPrivateCarService.insert(privateCar);
        } else {///  用户不是平台用户时
            TUser tUser = new TUser();
@@ -629,7 +648,7 @@
            userService.insert(tUser);
            ///  存入订单信息
            privateCar.setOrderNum("PRIVATE" + String.valueOf(1000000 + tOrderPrivateCarService.selectList(null).size() + 1).substring(1));
            privateCar.setOrderNum(getPrivateCarOrderNum());
            privateCar.setUserId(tUser.getId());
            privateCar.setState(1);
            privateCar.setInsertTime(DateUtil.parseTime(DateUtil.getTime()));
@@ -653,6 +672,7 @@
            } else {
                privateCar.setOrderType(1);
            }
            fillDispatchPrivateCarOrder(privateCar);
            tOrderPrivateCarService.insert(privateCar);
        }
@@ -664,4 +684,77 @@
        System.out.println("添加订单推单调用结果:" + result);
        return SUCCESS_TIP;
    }
    private String getPrivateCarOrderNum() {
        return "PR" + new java.text.SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + UUIDUtil.getRandomCode().substring(0, 5);
    }
    private boolean hasUnfinishedTravelOrder(Integer userId) {
        if (userId == null) {
            return false;
        }
        return tOrderPrivateCarService.selectCount(new EntityWrapper<TOrderPrivateCar>()
                .eq("isDelete", 1)
                .eq("userId", userId)
                .notIn("state", 8, 9, 10, 12)) > 0
                || tOrderTaxiService.selectCount(new EntityWrapper<TOrderTaxi>()
                .eq("isDelete", 1)
                .eq("userId", userId)
                .notIn("state", 8, 9, 10, 12)) > 0
                || tOrderCrossCityService.selectCount(new EntityWrapper<TOrderCrossCity>()
                .eq("isDelete", 1)
                .eq("userId", userId)
                .notIn("state", 8, 9, 10, 12)) > 0;
    }
    private void fillDispatchPrivateCarOrder(TOrderPrivateCar privateCar) {
        privateCar.setIsDelete(1);
        privateCar.setTotalPeopleNum(1);
        fillPlacementAndCompany(privateCar);
        fillEstimateDistance(privateCar);
    }
    private void fillPlacementAndCompany(TOrderPrivateCar privateCar) {
        if (privateCar.getStartLon() == null || privateCar.getStartLat() == null) {
            return;
        }
        try {
            Map<String, String> geocode = gdMapGeocodingUtil.geocode(privateCar.getStartLon().toString(), privateCar.getStartLat().toString());
            if (ToolUtil.isNotEmpty(geocode.get("address"))) {
                privateCar.setPlacementAddress(geocode.get("address"));
            }
            if (ToolUtil.isNotEmpty(geocode.get("districtCode"))) {
                TCompanyCity companyCity = tCompanyCityService.selectOne(new EntityWrapper<TCompanyCity>()
                        .eq("areaCode", Integer.valueOf(geocode.get("districtCode")))
                        .eq("state", 1));
                if (companyCity != null) {
                    privateCar.setCompanyId(companyCity.getCompanyId());
                }
            }
        } catch (Exception e) {
            System.err.println("管理端添加快车单补充下单地/公司失败:" + e.getMessage());
        }
    }
    private void fillEstimateDistance(TOrderPrivateCar privateCar) {
        if (privateCar.getStartLon() == null || privateCar.getStartLat() == null
                || privateCar.getEndLon() == null || privateCar.getEndLat() == null) {
            return;
        }
        try {
            Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(
                    privateCar.getStartLon() + "," + privateCar.getStartLat(),
                    privateCar.getEndLon() + "," + privateCar.getEndLat(), 1);
            if (distanceMap != null) {
                if (ToolUtil.isNotEmpty(distanceMap.get("distance"))) {
                    privateCar.setEstimateMileage(Double.valueOf(distanceMap.get("distance")));
                }
                if (ToolUtil.isNotEmpty(distanceMap.get("duration"))) {
                    privateCar.setEstimateTime(Double.valueOf(distanceMap.get("duration")) / 60);
                }
            }
        } catch (Exception e) {
            System.err.println("管理端添加快车单补充预估距离失败:" + e.getMessage());
        }
    }
}