mitao
2024-09-04 ecca9ab70a9a87bcb60977c92fbf81053b8fc1bb
ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/MasterWorkerServiceImpl.java
@@ -1,17 +1,15 @@
package com.ruoyi.worker.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.utils.GaoDeMapUtil;
import com.ruoyi.order.api.entity.Order;
import com.ruoyi.order.api.feignClient.OrderClient;
import com.ruoyi.worker.entity.MasterWorker;
import com.ruoyi.worker.entity.Order;
import com.ruoyi.worker.entity.RecoveryServe;
import com.ruoyi.worker.mapper.MasterWorkerMapper;
import com.ruoyi.worker.service.MasterWorkerService;
import com.ruoyi.worker.service.OrderService;
import com.ruoyi.worker.service.RecoveryServeService;
import com.ruoyi.worker.vo.OrderCountVO;
import com.ruoyi.worker.vo.OrderListVO;
import com.ruoyi.worker.vo.OrderNotHandleVO;
import org.springframework.stereotype.Service;
@@ -34,22 +32,103 @@
public class MasterWorkerServiceImpl extends ServiceImpl<MasterWorkerMapper, MasterWorker> implements MasterWorkerService {
    @Resource
    private OrderService orderService;
    @Resource
    private RecoveryServeService recoveryServeService;
    @Override
    public OrderCountVO orderCount(Integer id) {
        return baseMapper.orderCount(id);
    }
    @Resource
    private OrderClient orderClient;
    @Override
    public List<OrderListVO> orderNotHandle(Integer userid, String longitude, String latitude) {
        List<Order> orderList = orderService.lambdaQuery().eq(Order::getServerId, userid)
                .eq(Order::getState, Constants.ONE)
                .eq(Order::getIsDelete, 0)
                .eq(Order::getType, Constants.ZERO)
                .orderByAsc(Order::getTopSort).list();
        List<Order> orderList = orderClient.orderNotHandle(userid).getData();
        // 根据经纬度距离封装
        List<OrderNotHandleVO> list = new ArrayList<>();
        boolean item = false;
        for (Order order : orderList) {
            if (null != order.getTopSort()) {
                item = true;
                break;
            }
        }
        for (Order order : orderList) {
            // 用户下单经纬度
            Double orderLongitude = order.getLongitude();
            Double orderLatitude = order.getLatitude();
            Integer topSort = order.getTopSort();
            String orderPosition = orderLongitude + "," + orderLatitude;
            // 根据经纬度计算与师傅的距离
            Result<Long> result = GaoDeMapUtil.getDistance(orderPosition, longitude + "," + latitude);
            Long distance = result.getDatas();
            // 回收服务信息
            RecoveryServe recoveryServe = recoveryServeService.lambdaQuery()
                    .eq(RecoveryServe::getId, order.getServeId()).one();
            // vo类信息封装
            OrderListVO orderListVO = new OrderListVO();
            orderListVO.setOrderId(order.getId());
            orderListVO.setOrderNumber(order.getOrderNumber());
            orderListVO.setSiteId(order.getSiteId());
            orderListVO.setSiteName(order.getSiteName());
            orderListVO.setServeId(order.getServeId());
            orderListVO.setServeName(order.getServeName());
            if (null != recoveryServe) {
                orderListVO.setServePicture(recoveryServe.getCover());
                orderListVO.setServePrice(recoveryServe.getDefaultPrice());
            }
            orderListVO.setUserId(userid);
            orderListVO.setReservationName(order.getReservationName());
            orderListVO.setReservationPhone(order.getReservationPhone());
            if (order.getAddress()!=null) {
                orderListVO.setReservationAddress(order.getReservationAddress() + order.getAddress());
            }else {
                orderListVO.setReservationAddress(order.getReservationAddress());
            }
            orderListVO.setTime(order.getTime());
            orderListVO.setServerId(order.getServerId());
            orderListVO.setServerName(order.getServerName());
            orderListVO.setServerPhone(order.getServerPhone());
            orderListVO.setReservationRemark(order.getReservationRemark());
            orderListVO.setOrderMoney(order.getOrderMoney());
            orderListVO.setState(order.getState());
            orderListVO.setAcceptTime(order.getAcceptTime());
            orderListVO.setArriveTime(order.getArriveTime());
            orderListVO.setType(order.getType());
            orderListVO.setLongitude(order.getLongitude());
            orderListVO.setLatitude(order.getLatitude());
            orderListVO.setTopSort(topSort);
            orderListVO.setFake(order.getFake()==null?0:order.getFake());
            OrderNotHandleVO vo = new OrderNotHandleVO(distance, orderListVO);
            list.add(vo);
        }
        List<OrderNotHandleVO> newList = new ArrayList<>();
        if (item) {
            // 已置顶订单
            List<OrderNotHandleVO> topSortNotNull = list.stream()
                    .filter(data -> data.getOrderList().getTopSort() != null).collect(Collectors.toList());
            newList.addAll(topSortNotNull);
            // 未置顶订单,根据距离由近到远排序
            List<OrderNotHandleVO> topSortNull = list.stream()
                    .filter(data -> data.getOrderList().getTopSort() == null).collect(Collectors.toList());
            topSortNull.sort(Comparator.comparing(OrderNotHandleVO::getDistance));
            newList.addAll(topSortNull);
            return newList.stream().map(OrderNotHandleVO::getOrderList).collect(Collectors.toList());
        } else {
            // 根据距离排序
            list.sort(Comparator.comparing(OrderNotHandleVO::getDistance));
            List<OrderListVO> resultList = list.stream().map(OrderNotHandleVO::getOrderList).collect(Collectors.toList());
            for (OrderListVO orderListVO : resultList) {
                Integer serveId = orderListVO.getServeId();
                // 回收服务信息
                RecoveryServe recoveryServe = recoveryServeService.lambdaQuery().eq(RecoveryServe::getId, serveId).one();
                if (null != recoveryServe) {
                    orderListVO.setServePicture(recoveryServe.getCover());
                }
            }
            return resultList;
        }
    }
    @Override
    public List<OrderListVO> orderMapMode(Integer userid, String longitude, String latitude) {
        List<Order> orderList = orderClient.orderNotHandle(userid).getData();
        // 根据经纬度距离封装
        List<OrderNotHandleVO> list = new ArrayList<>();
        for (Order order : orderList) {
@@ -62,22 +141,29 @@
            Result<Long> result = GaoDeMapUtil.getDistance(orderPosition, longitude + "," + latitude);
            Long distance = result.getDatas();
            // 回收服务信息
            RecoveryServe recoveryServe = recoveryServeService.lambdaQuery().eq(RecoveryServe::getId, order.getServeId())
                    .eq(RecoveryServe::getIsDelete, 0).one();
            RecoveryServe recoveryServe = recoveryServeService.lambdaQuery()
                    .eq(RecoveryServe::getId, order.getServeId()).one();
            // vo类信息封装
            OrderListVO orderListVO = new OrderListVO(order.getServeId());
            OrderListVO orderListVO = new OrderListVO();
            orderListVO.setOrderId(order.getId());
            orderListVO.setOrderNumber(order.getOrderNumber());
            orderListVO.setSiteId(order.getSiteId());
            orderListVO.setSiteName(order.getSiteName());
            orderListVO.setServeId(order.getServeId());
            orderListVO.setServeName(order.getServeName());
            orderListVO.setServePicture(recoveryServe.getCover());
            orderListVO.setServePrice(recoveryServe.getDefaultPrice());
            if (null != recoveryServe) {
                orderListVO.setServePicture(recoveryServe.getCover());
                orderListVO.setServePrice(recoveryServe.getDefaultPrice());
            }
            orderListVO.setUserId(userid);
            orderListVO.setReservationName(order.getReservationName());
            orderListVO.setReservationPhone(order.getReservationPhone());
            orderListVO.setReservationAddress(order.getReservationAddress());
            if (order.getAddress()!=null) {
                orderListVO.setReservationAddress(order.getReservationAddress() + order.getAddress());
            }else {
                orderListVO.setReservationAddress(order.getReservationAddress());
            }
            orderListVO.setTime(order.getTime());
            orderListVO.setServerId(order.getServerId());
            orderListVO.setServerName(order.getServerName());
@@ -100,32 +186,12 @@
        for (OrderListVO orderListVO : resultList) {
            Integer serveId = orderListVO.getServeId();
            // 回收服务信息
            RecoveryServe recoveryServe = recoveryServeService.lambdaQuery().eq(RecoveryServe::getId, serveId)
                    .eq(RecoveryServe::getIsDelete, 0).one();
            RecoveryServe recoveryServe = recoveryServeService.lambdaQuery().eq(RecoveryServe::getId, serveId).one();
            if (null != recoveryServe) {
                orderListVO.setServePicture(recoveryServe.getCover());
            }
        }
        return resultList;
    }
    @Override
    public Boolean orderTop(Integer orderId, Integer userid) {
        // 订单代办列表
        List<Order> orderList = orderService.lambdaQuery().eq(Order::getServerId, userid)
                .eq(Order::getState, Constants.ONE)
                .eq(Order::getIsDelete, 0)
                .eq(Order::getType, Constants.ZERO)
                .orderByAsc(Order::getTopSort).list();
        List<Order> orders = orderList.stream().filter(data -> null != data.getTopSort()).collect(Collectors.toList());
        int itemSort = 2;
        for (Order order : orders) {
            order.setTopSort(itemSort);
            itemSort++;
        }
        return orderService.lambdaUpdate().set(Order::getTopSort, Constants.ONE)
                .eq(Order::getServerId, userid)
                .eq(Order::getIsDelete, 0).update();
    }
}