puzhibing
2023-06-23 85fefef6c862c543117ad8d2691817bfeae69f41
修改bug
6个文件已修改
230 ■■■■■ 已修改文件
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java 183 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/TaskUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java
@@ -73,6 +73,14 @@
    /**
     * 推送服务中的数据
     * @param orderId
     */
    void pushOrderInfo(Long orderId);
    /**
     * 获取订单详情
     * @param orderId
     * @return
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverServiceImpl.java
@@ -220,8 +220,10 @@
        driver.setCityCode(branchOffice.getCityCode());
        driver.setAreaCode(branchOffice.getDistrictCode());
        driver.setAreaName(branchOffice.getDistrictName());
        driver.setInviterType(driverRegisterWarpper.getInviterType());
        driver.setInviterId(driverRegisterWarpper.getInviterId());
        if(null != driverRegisterWarpper.getInviterId()){
            driver.setInviterType(driverRegisterWarpper.getInviterType());
            driver.setInviterId(driverRegisterWarpper.getInviterId());
        }
        driver.setApprovalStatus(1);
        driver.setApprovalNotes("");
        driver.setApprovalTime(null);
@@ -242,6 +244,9 @@
     */
    @Override
    public ResultUtil<TokenWarpper> driverLogin(String receiver, String phone, String code) throws Exception {
        if(ToolUtil.isEmpty(receiver)){
            receiver = "+86";
        }
        String value = redisUtil.getValue(receiver + phone);
        if(!"12345".equals(code) && ToolUtil.isEmpty(value)){
            return ResultUtil.error("短信验证码无效");
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java
@@ -70,7 +70,7 @@
            String toLonLat = orderPositionWarpper1.getLon() + "," + orderPositionWarpper1.getLat();
            Map<String, Double> distance = GeodesyUtil.getDistance(fromLonLat, toLonLat);
            Double wgs84 = distance.get("WGS84");
            if(wgs84 >= 100){
            if(wgs84 >= 80){
                OrderPositionWarpper orderPositionWarpper = new OrderPositionWarpper();
                BeanUtils.copyProperties(driverPositionWarpper, orderPositionWarpper);
                orderPositionWarpper.setInsertTime(new Date());
@@ -103,7 +103,7 @@
        Order order = orderService.selectById(driverPositionWarpper.getOrderId());
        Double wgs84 = distance.get("WGS84");
        Integer num = map.get(order.getId().toString());
        if(100 < wgs84){
        if(80 < wgs84){
            order.setActualMileage(order.getActualMileage() + wgs84.intValue());
            orderService.updateById(order);
            map.put(order.getId().toString(), 0);
@@ -119,7 +119,7 @@
                }
            }
        }
        if(100 >= wgs84 && 12 <= (null == num ? 0 : num)){//1分钟(5秒上传一次数据)
        if(80 >= wgs84 && 12 <= (null == num ? 0 : num)){//1分钟(5秒上传一次数据)
            Integer integer = map.get(order.getId().toString());
            map.put(order.getId().toString(), null == integer ? 0 : integer++);
            //进入等待状态
@@ -132,7 +132,7 @@
                e.printStackTrace();
            }
        }
        if(100 >= wgs84 && 12 > (null == num ? 0 : num)){
        if(80 >= wgs84 && 12 > (null == num ? 0 : num)){
            Integer integer = map.get(order.getId().toString());
            map.put(order.getId().toString(), null == integer ? 0 : integer++);
        }
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -34,7 +34,6 @@
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@@ -110,8 +109,6 @@
    @Value("${callbackPath}")
    private String callbackPath;//支付回调网关地址
    private Map<String, Timer> timerMap = new HashMap<>();
@@ -204,6 +201,8 @@
        driverService.updateById(driver);
        //推送状态
        if(null != order.getDriverId()){
            //推动订单数据
            redisUtil.addSetValue("orderService", order.getId().toString());
            pushUtil.pushOrderStatus(uid, 2, order.getId(), order.getStatus());
        }else{
            //开始推单
@@ -426,7 +425,6 @@
    /**
     * 订单推送逻辑
     * @param order
     */
    public void pushOrder(Long orderId){
        try {
@@ -594,11 +592,16 @@
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        driver1.setServerStatus(1);
                        driverService.updateById(driver1);
                        Order order1 = OrderServiceImpl.this.selectById(order.getId());
                        if(order1.getState() == 101 || order1.getState() == 201){
                        if(order1.getState() != 101 && order1.getState() != 201 && order1.getDriverId().compareTo(driver1.getId()) != 0){
                            driver1.setServerStatus(1);
                            driverService.updateById(driver1);
                        }
                        if(order1.getState() == 201 || (order1.getState() == 101 && null == order1.getDriverId())){
                            driver1.setServerStatus(1);
                            driverService.updateById(driver1);
                            order1.setHallOrder(1);
                            OrderServiceImpl.this.updateById(order1);
                            ExtraPushOrder(order);
@@ -805,11 +808,7 @@
            driverService.updateById(driver);
            if(state == 201){//转单的订单
                //停止定时任务
                Timer timer = timerMap.get(order.getId().toString());
                if(null != timer){
                    timer.cancel();
                    timerMap.remove(order.getId().toString());
                }
                redisUtil.delSetValue("orderService", order.getId().toString());
                //原司机下班 TODO 2023-06-21 客户说取消此功能
                Driver oldDriver = driverService.selectById(oldDriverId);
                oldDriver.setServerStatus(1);
@@ -842,7 +841,7 @@
            }
            //推动订单数据
            pushOrderInfo(order.getId(), uid);//开始推送订单数据
            redisUtil.addSetValue("orderService", order.getId().toString());
            //发送系统消息
            systemMessageService.addSystemMessage(uid, 2, "接单成功", "您已成功接到用户订单,请尽快联系客户!");
            pushUtil.pushOrderStatus(order.getDriverId(), 2, order.getId(), order.getState());
@@ -867,7 +866,18 @@
     */
    @Override
    public OrderInfoWarpper queryOrderInfo(Integer uid, Long orderId) throws Exception {
        Order order = this.selectById(orderId);
        OrderInfoWarpper orderInfoWarpper = this.baseMapper.queryOrderInfo(orderId);
        Integer wait = Integer.valueOf(orderInfoWarpper.getWaitTime());
        if(null != order.getStartWaitTime()){
            wait += Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue();
        }
        Integer s = wait % 60;
        int m = Double.valueOf(wait / 60).intValue();
        orderInfoWarpper.setWaitTime((m < 10 ? ("0" + m) : m) + ":" + (s < 10 ? ("0" + s) : s));
        Double actualMileage = orderInfoWarpper.getActualMileage();
        orderInfoWarpper.setActualMileage(new BigDecimal(actualMileage).divide(new BigDecimal(1000), 2, RoundingMode.HALF_EVEN).doubleValue());
        if(orderInfoWarpper.getTravelTime() == null){
            orderInfoWarpper.setTravelTime(0);
        }
@@ -953,6 +963,7 @@
                driver.setServerStatus(1);
                driverService.updateById(driver);
                saveIntegral(order);
                redisUtil.delSetValue("orderService", order.getId().toString());
                break;
            case 401:
                order.setStartWaitTime(new Date());
@@ -1031,58 +1042,45 @@
    /**
     * 定时任务推送订单数据
     * @param orderId
     * @param uid
     */
    public void pushOrderInfo(Long orderId, Integer uid){
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                String value = redisUtil.getValue("DRIVER" + uid);
                Order order = OrderServiceImpl.this.selectById(orderId);
                if(order.getState() == 106 || order.getState() == 301){
                    Timer timer = timerMap.get(order.getId().toString());
                    if(null != timer){
                        timer.cancel();
                        timerMap.remove(order.getId().toString());
                    }
                }
    @Override
    public void pushOrderInfo(Long orderId){
        Order order = this.selectById(orderId);
        Integer driverId = order.getDriverId();
        String value = redisUtil.getValue("DRIVER" + driverId);
        if(order.getState() == 106 || order.getState() == 301){
            redisUtil.delSetValue("orderService", orderId.toString());
            return;
        }
                PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
                pushOrderInfoWarpper.setId(orderId);
                if(ToolUtil.isNotEmpty(value)){
                    String[] split = value.split(",");
                    pushOrderInfoWarpper.setDriverLat(split[1]);
                    pushOrderInfoWarpper.setDriverLng(split[0]);
                }
                Integer w = 0;
                if(null != order.getStartWaitTime()){
                    w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue();
                }
                Integer wait = order.getWaitTime() + w;
                Integer s = wait % 60;
                pushOrderInfoWarpper.setWaitTime(Double.valueOf(wait / 60).intValue() + "." + s);
                pushOrderInfoWarpper.setState(order.getState());
                pushOrderInfoWarpper.setActualMileage(Double.valueOf(order.getActualMileage() / 1000));
                pushOrderInfoWarpper.setTravelTime("0");
                if(null != order.getStartTime()){
                    int travelTime = Double.valueOf((System.currentTimeMillis() - order.getStartTime().getTime()) / 1000).intValue();
                    Integer ss = travelTime % 60;
                    pushOrderInfoWarpper.setTravelTime(Double.valueOf(travelTime / 60).intValue() + "." + ss);
                }
                if(null != order.getUserId()){
                    pushUtil.pushOrderInfo(order.getUserId(), 1, pushOrderInfoWarpper);
                }
                if(order.getState() == 301){//司机取消不推送给司机
                    CancelOrder cancelOrder = cancelOrderService.selectOne(new EntityWrapper<CancelOrder>().eq("orderId", order.getId()).eq("status", 1));
                    if(null != cancelOrder && cancelOrder.getUserType() == 2){
                        return;
                    }
                }
                pushUtil.pushOrderInfo(uid, 2, pushOrderInfoWarpper);
        PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
        pushOrderInfoWarpper.setId(orderId);
        if(ToolUtil.isNotEmpty(value)){
            String[] split = value.split(",");
            pushOrderInfoWarpper.setDriverLat(split[1]);
            pushOrderInfoWarpper.setDriverLng(split[0]);
        }
        Integer w = 0;
        if(null != order.getStartWaitTime()){
            w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue();
        }
        Integer wait = order.getWaitTime() + w;
        Integer s = wait % 60;
        Integer m = wait / 60;
        pushOrderInfoWarpper.setWaitTime((m < 10 ? ("0" + m) : m) + ":" + (s < 10 ? ("0" + s) : s));
        pushOrderInfoWarpper.setState(order.getState());
        pushOrderInfoWarpper.setActualMileage(new BigDecimal(order.getActualMileage()).divide(new BigDecimal(1000), 2, RoundingMode.HALF_EVEN).doubleValue());
        pushOrderInfoWarpper.setTravelTime("0");
        if(null != order.getUserId()){
            pushUtil.pushOrderInfo(order.getUserId(), 1, pushOrderInfoWarpper);
        }
        if(order.getState() == 301){//司机取消不推送给司机
            CancelOrder cancelOrder = cancelOrderService.selectOne(new EntityWrapper<CancelOrder>().eq("orderId", order.getId()).eq("status", 1));
            if(null != cancelOrder && cancelOrder.getUserType() == 2){
                return;
            }
        },0, 5000);
        timerMap.put(orderId.toString(), timer);
        }
        pushUtil.pushOrderInfo(driverId, 2, pushOrderInfoWarpper);
    }
@@ -1207,6 +1205,7 @@
        order.setState(301);
        this.updateById(order);
        redisUtil.delSetValue("orderService", orderId.toString());
        CancelOrder cancelOrder = new CancelOrder();
        cancelOrder.setOrderId(orderId);
@@ -1222,7 +1221,9 @@
            driverService.updateById(driver);
        }
        pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getStatus());
        if(null != order.getUserId()){
            pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getStatus());
        }
        return ResultUtil.success();
    }
@@ -1256,7 +1257,8 @@
        }
        Integer waitTime = order.getWaitTime() + order.getOutWaitTime();
        Integer s = waitTime % 60;
        orderPriceWarpper.setWaitTime(Double.valueOf(waitTime / 60).intValue() + "." + s);
        Integer m = waitTime / 60;
        orderPriceWarpper.setWaitTime((m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s));
        orderPriceWarpper.setWaitTimePrice(order.getWaitTimePrice() + order.getOutWaitTimePrice());
        orderPriceWarpper.setDiscountAmount(order.getDiscountAmount());
        orderPriceWarpper.setDiscountedPrice(order.getDiscountedPrice());
@@ -1457,31 +1459,32 @@
        Driver driver = driverService.selectById(order.getDriverId());
        AppUser appUser = appUserService.selectById(order.getUserId());
        //司机推荐首单收入
        List<Integer> state = Arrays.asList(107, 108, 109);
        int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state));
        if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
            Driver driver1 = driverService.selectById(appUser.getInviterId());
            //首单积分奖励
            SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
            JSONObject jsonObject2 = JSON.parseObject(systemConfig1.getContent());
            Integer num4 = jsonObject2.getInteger("num4");
            AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
            accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
            accountChangeDetail.setUserType(2);
            accountChangeDetail.setUserId(driver1.getId());
            accountChangeDetail.setType(2);
            accountChangeDetail.setChangeType(5);
            accountChangeDetail.setOrderId(order.getId());
            accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
            accountChangeDetail.setExplain("邀请用户首单积分奖励");
            accountChangeDetail.setCreateTime(new Date());
            driver1.setIntegral(driver1.getIntegral() + num4);
            accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
            accountChangeDetailService.insert(accountChangeDetail);
            driverService.updateById(driver1);
        if(null != order.getUserId()){
            //司机推荐首单收入
            List<Integer> state = Arrays.asList(107, 108, 109);
            int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state));
            if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
                Driver driver1 = driverService.selectById(appUser.getInviterId());
                //首单积分奖励
                SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
                JSONObject jsonObject2 = JSON.parseObject(systemConfig1.getContent());
                Integer num4 = jsonObject2.getInteger("num4");
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(driver1.getId());
                accountChangeDetail.setType(2);
                accountChangeDetail.setChangeType(5);
                accountChangeDetail.setOrderId(order.getId());
                accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
                accountChangeDetail.setExplain("邀请用户首单积分奖励");
                accountChangeDetail.setCreateTime(new Date());
                driver1.setIntegral(driver1.getIntegral() + num4);
                accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
                accountChangeDetailService.insert(accountChangeDetail);
                driverService.updateById(driver1);
            }
        }
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 3));
@@ -1512,7 +1515,7 @@
                if(null != systemConfig1){
                    JSONObject jsonObject1 = JSON.parseObject(systemConfig1.getContent());
                    //司机推荐用户收入
                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2){
                    if(null != appUser && null != appUser.getInviterType() && appUser.getInviterType() == 2){
                        Double num1 = jsonObject1.getDouble("num1");
                        num1 = (num3 >= num1 ? num1 : num3);
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/TaskUtil.java
@@ -9,6 +9,8 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Set;
/**
 * 定时任务工具类
@@ -28,6 +30,24 @@
    @Autowired
    private IYouTuiDriverService youTuiDriverService;
    @Autowired
    private RedisUtil redisUtil;
    /**
     * 5秒推送
     */
    @Scheduled(fixedRate = 1000 * 5)
    public void task5Seconds(){
        try {
            Set<String> orderServices = redisUtil.getSetAllValue("orderService");
            for (String s : orderServices) {
                orderService.pushOrderInfo(Long.valueOf(s));//开始推送订单数据
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java
@@ -52,7 +52,7 @@
    @ApiModelProperty("起步价")
    private Double startPrice;
    @ApiModelProperty("等待时长")
    private Integer waitTime;
    private String waitTime;
    @ApiModelProperty("行驶里程")
    private Double actualMileage;
    @ApiModelProperty("行驶时间")