hjl
2024-07-02 242725f795b4cca830421c07f714a3ec36af0add
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java
@@ -5,7 +5,6 @@
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.admin.entity.*;
@@ -19,7 +18,6 @@
import com.ruoyi.common.core.constant.OrderConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.utils.StringUtils;
import org.apache.commons.codec.CharEncoding;
import org.springframework.stereotype.Service;
@@ -32,7 +30,6 @@
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -61,10 +58,12 @@
    private ServeCoordinateService serveCoordinateService;
    @Resource
    private EvaluateService evaluateService;
    @Resource
    private ChangeDispatchService changeDispatchService;
    @Override
    public OrderResultVO orderCountHome(OrderCountRequest orderCount) {
        List<String> cityId = orderCount.getCityIdList();
        List<String> cityList = orderCount.getCityList();
        Integer orderState = orderCount.getOrderState();
        String countType = orderCount.getCountType();
        String startTime = orderCount.getStartTime();
@@ -72,13 +71,13 @@
        List<OrderQueryVO> list;
        // 根据查询类型查询订单信息
        if (OrderConstants.YEAR.equals(countType)) {
            list = baseMapper.orderCountByYear(cityId, orderState, startTime, endTime);
            list = baseMapper.orderCountByYear(cityList, orderState, startTime, endTime);
        } else if (OrderConstants.MONTH.equals(countType)) {
            list = baseMapper.orderCountByMonth(cityId, orderState, startTime, endTime);
            list = baseMapper.orderCountByMonth(cityList, orderState, startTime, endTime);
        } else if (OrderConstants.WEEK.equals(countType)) {
            list = baseMapper.orderCountByWeek(cityId, orderState, startTime, endTime);
            list = baseMapper.orderCountByWeek(cityList, orderState, startTime, endTime);
        } else if (OrderConstants.TODAY.equals(countType)) {
            list = baseMapper.orderCountByToday(cityId, orderState, startTime, endTime);
            list = baseMapper.orderCountByToday(cityList, orderState, startTime, endTime);
        } else {
            list = new ArrayList<>();
        }
@@ -96,22 +95,22 @@
    }
    @Override
    public BigDecimal totalMoneyByQuarter(String startDateStr, String endDateStr, List<String> cityIdList) {
        return baseMapper.totalMoneyByQuarter(startDateStr, endDateStr, cityIdList);
    public BigDecimal totalMoneyByQuarter(String startDateStr, String endDateStr, List<String> cityList) {
        return baseMapper.totalMoneyByQuarter(startDateStr, endDateStr, cityList);
    }
    @Override
    public BigDecimal totalMoneyByYear(List<String> cityIdList) {
        return baseMapper.totalMoneyByYear(cityIdList);
    public BigDecimal totalMoneyByYear(List<String> cityList) {
        return baseMapper.totalMoneyByYear(cityList);
    }
    @Override
    public BigDecimal totalMoneyByMonth(List<String> cityIdList) {
        return baseMapper.totalMoneyByMonth(cityIdList);
    public BigDecimal totalMoneyByMonth(List<String> cityList) {
        return baseMapper.totalMoneyByMonth(cityList);
    }
    @Override
    public R<String> excelExport(List<String> idList, HttpServletResponse response) {
    public R<String> excelExport(OrderQueryRequest orderQueryRequest, HttpServletResponse response) {
        try {
            response.setCharacterEncoding(Constants.UTF8);
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
@@ -121,7 +120,13 @@
            return R.fail("excel导出失败!");
        }
        try {
            List<Order> list = lambdaQuery().in(Order::getId, idList).eq(Order::getIsDelete, 0).list();
            List<String> ids = orderQueryRequest.getIds();
            List<Order> list;
            if (null != ids && !ids.isEmpty()) {
                list = baseMapper.exportByIdList(ids);
            } else {
                list = baseMapper.exportList(orderQueryRequest);
            }
            // excel模板封装
            ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream());
            InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" + Constants.EXCEL_ORDER_FILE_NAME + ".xlsx");
@@ -141,32 +146,20 @@
    @Override
    public IPage<Order> queryPage(OrderQueryRequest orderQueryRequest) {
        // 查询参数
        String orderNumber = orderQueryRequest.getOrderNumber();
        String cityName = orderQueryRequest.getCityName();
        String reservationName = orderQueryRequest.getReservationName();
        String reservationPhone = orderQueryRequest.getReservationPhone();
        Integer state = orderQueryRequest.getState();
        String workerName = orderQueryRequest.getWorkerName();
        String workerPhone = orderQueryRequest.getWorkerPhone();
        Date orderTime = orderQueryRequest.getOrderTime();
        Date time = orderQueryRequest.getTime();
        String serveName = orderQueryRequest.getServeName();
        Page<Order> page = Page.of(orderQueryRequest.getPageNum(), orderQueryRequest.getPageSize());
        // 构建查询体
        LambdaQueryChainWrapper<Order> wrapper = lambdaQuery();
        wrapper = StringUtils.isNotBlank(orderNumber) ? wrapper.like(Order::getOrderNumber, orderNumber) : wrapper;
        wrapper = StringUtils.isNotBlank(cityName) ? wrapper.like(Order::getReservationAddress, cityName) : wrapper;
        wrapper = StringUtils.isNotBlank(reservationName) ? wrapper.like(Order::getReservationName, reservationName) : wrapper;
        wrapper = StringUtils.isNotBlank(reservationPhone) ? wrapper.like(Order::getReservationPhone, reservationPhone) : wrapper;
        wrapper = null != state ? wrapper.eq(Order::getState, state) : wrapper;
        wrapper = StringUtils.isNotBlank(workerName) ? wrapper.like(Order::getServerName, workerName) : wrapper;
        wrapper = StringUtils.isNotBlank(workerPhone) ? wrapper.like(Order::getServerPhone, workerPhone) : wrapper;
        wrapper = null != orderTime ? wrapper.eq(Order::getCreateTime, orderTime) : wrapper;
        wrapper = null != time ? wrapper.eq(Order::getTime, time) : wrapper;
        wrapper = StringUtils.isNotBlank(serveName) ? wrapper.like(Order::getServeName, serveName) : wrapper;
        // 基础查询
        return wrapper.eq(Order::getIsDelete, 0).orderByDesc(Order::getCreateTime).page(page);
        IPage<Order> pageList = baseMapper.queryPage(orderQueryRequest, page);
        for (Order order : pageList.getRecords()) {
            ChangeDispatch changeDispatch = changeDispatchService.lambdaQuery()
                    .eq(ChangeDispatch::getOrderId, order.getId())
                    .eq(ChangeDispatch::getIsDelete, 0)
                    .orderByDesc(ChangeDispatch::getCreateTime)
                    .last("limit 1").one();
            if (null != changeDispatch) {
                order.setApplyReason(changeDispatch.getApplyReason());
            }
        }
        return pageList;
    }
    @Override
@@ -191,18 +184,17 @@
        Evaluate evaluate = evaluateService.lambdaQuery().eq(Evaluate::getOrderId, order.getId())
                .eq(Evaluate::getIsDelete, 0).one();
        OrderByEvaluateVO orderByEvaluate = new OrderByEvaluateVO();
        orderByEvaluate.setStarRating(evaluate.getStarRating());
        orderByEvaluate.setEvaluateTime(evaluate.getCreateTime());
        orderByEvaluate.setEvaluateContent(evaluate.getContent());
        if (null != evaluate) {
            orderByEvaluate.setStarRating(evaluate.getStarRating());
            orderByEvaluate.setEvaluateTime(evaluate.getCreateTime());
            orderByEvaluate.setEvaluateContent(evaluate.getContent());
        }
        result.setEvaluateInfo(orderByEvaluate);
    }
    private void serveRecordInfo(OrderDetailVO result, Order order) {
        ServeRecord serveRecord = serveRecordService.lambdaQuery().eq(ServeRecord::getOrderId, order.getId())
                .eq(ServeRecord::getIsDelete, 0).one();
        if (null == serveRecord) {
            throw new GlobalException("服务记录信息异常,请重试");
        }
        // 师傅路线轨迹
        List<ServeCoordinate> serveCoordinateList = serveCoordinateService.lambdaQuery().eq(ServeCoordinate::getWorkerId, order.getServerId())
                .eq(ServeCoordinate::getIsDelete, 0).orderByDesc(ServeCoordinate::getCreateTime).list();
@@ -210,7 +202,9 @@
        orderByServeRecord.setAcceptOrderTime(order.getAcceptTime());
        orderByServeRecord.setReachTime(order.getTime());
        orderByServeRecord.setCoordinate(serveCoordinateList.stream().map(ServeCoordinate::getCoordinate).collect(Collectors.toList()));
        orderByServeRecord.setPhoto(Arrays.stream(serveRecord.getPhoto().split(",")).collect(Collectors.toList()));
        if (null != serveRecord) {
            orderByServeRecord.setPhoto(Arrays.stream(serveRecord.getPhoto().split(",")).collect(Collectors.toList()));
        }
        result.setServeRecordInfo(orderByServeRecord);
    }
@@ -259,12 +253,11 @@
    private void userInfo(OrderDetailVO result, Order order) {
        Integer userId = order.getUserId();
        User user = userMapper.selectById(userId);
        if (null == user) {
            throw new GlobalException("预约人信息异常,请重试");
        }
        OrderByUserInfoVO orderByUserInfo = new OrderByUserInfoVO();
        orderByUserInfo.setProfilePicture(user.getProfilePicture());
        orderByUserInfo.setUserNumber(user.getUserNo());
        if (null != user) {
            orderByUserInfo.setProfilePicture(user.getProfilePicture());
            orderByUserInfo.setUserNumber(user.getUserNo());
        }
        orderByUserInfo.setReservationName(order.getReservationName());
        orderByUserInfo.setReservationPhone(order.getReservationPhone());
        orderByUserInfo.setReservationAddress(order.getReservationAddress());
@@ -276,4 +269,35 @@
    public IPage<OrderCountVO> orderCount(String name, String phone, Page<OrderCountVO> page) {
        return baseMapper.orderCount(name, phone, page);
    }
    @Override
    public OrderPageCountVO orderPageCount() {
        List<Order> orderList = baseMapper.orderPageCount();
        int total = 0;
        int toBeDispatched = 0;
        int stayDoorstep = 0;
        int toBeCompleted = 0;
        int completed = 0;
        int canceled = 0;
        int reInvestment = 0;
        for (Order order : orderList) {
            total++;
            Integer state = order.getState();
            if (Constants.ZERO.equals(state)) {
                toBeDispatched++;
            } else if (Constants.ONE.equals(state)) {
                stayDoorstep++;
            } else if (Constants.TWO.equals(state)) {
                toBeCompleted++;
            } else if (Constants.THREE.equals(state)) {
                completed++;
            } else if (Constants.FOUR.equals(state)) {
                canceled++;
            } else if (Constants.FIVE.equals(state)) {
                reInvestment++;
            }
        }
        return new OrderPageCountVO(total, toBeDispatched, stayDoorstep,
                toBeCompleted, completed, canceled, reInvestment);
    }
}