无关风月
1 天以前 1442f149019ee0590389abd7a88a79c4d9b59034
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -1,10 +1,14 @@
package com.ruoyi.order.service.impl;
import java.util.Date;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.constant.OrderConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.GaoDeMapUtil;
import com.ruoyi.common.core.vo.AddressDto;
import com.ruoyi.common.core.vo.PaperInVo;
import com.ruoyi.common.core.vo.Path;
import com.ruoyi.order.entity.ChangeDispatch;
import com.ruoyi.order.entity.Order;
@@ -12,19 +16,28 @@
import com.ruoyi.order.request.UserOrderRequest;
import com.ruoyi.order.service.ChangeDispatchService;
import com.ruoyi.order.service.OrderService;
import com.ruoyi.order.vo.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import com.ruoyi.order.vo.MoneyQueryRequest;
import com.ruoyi.order.vo.OrderCountRequest;
import com.ruoyi.order.vo.OrderCountVO;
import com.ruoyi.order.vo.OrderPageCountVO;
import com.ruoyi.order.vo.OrderQueryRequest;
import com.ruoyi.order.vo.OrderQueryVO;
import com.ruoyi.order.vo.OrderResultVO;
import com.ruoyi.order.vo.WorkerOrderCountVO;
import com.ruoyi.order.vo.WorkerOrderRankVO;
import com.ruoyi.user.api.feignClient.UserClient;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Month;
import java.time.Year;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * <p>
@@ -40,6 +53,8 @@
    @Resource
    private ChangeDispatchService changeDispatchService;
    @Resource
    private UserClient userClient;
    @Override
    public OrderResultVO orderCountHome(OrderCountRequest orderCount) {
@@ -48,44 +63,79 @@
        String countType = orderCount.getCountType();
        String startTime = orderCount.getStartTime();
        String endTime = orderCount.getEndTime();
//        String [] siteIds = orderCount.getSiteIds();
        List<OrderQueryVO> list;
        // 根据查询类型查询订单信息
        if (OrderConstants.YEAR.equals(countType)) {
            list = baseMapper.orderCountByYear(cityList, orderState, startTime, endTime);
            list = baseMapper.orderCountByYear(cityList, orderState,orderCount.getSiteIds());
        } else if (OrderConstants.MONTH.equals(countType)) {
            list = baseMapper.orderCountByMonth(cityList, orderState, startTime, endTime);
            list = baseMapper.orderCountByMonth(cityList, orderState, orderCount.getSiteIds());
        } else if (OrderConstants.WEEK.equals(countType)) {
            list = baseMapper.orderCountByWeek(cityList, orderState, startTime, endTime);
            list = baseMapper.orderCountByWeek(cityList, orderState, orderCount.getSiteIds());
        } else if (OrderConstants.TODAY.equals(countType)) {
            list = baseMapper.orderCountByToday(cityList, orderState, startTime, endTime);
            list = baseMapper.orderCountByToday(cityList, orderState, orderCount.getSiteIds());
        } else {
            list = new ArrayList<>();
            try {
                startTime = startTime + " 00:00:00";
                endTime = endTime + " 00:00:00";
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date date1 = sdf.parse(startTime);
                Date date2 = sdf.parse(endTime);
                long diffInMillis = date2.getTime() - date1.getTime();
                long diffInDays = diffInMillis / (24 * 60 * 60 * 1000);
                if (diffInDays > Constants.YEAR_DAY) {
                    list = baseMapper.orderCountByTimeRangeYear(cityList, startTime, endTime, orderState, orderCount.getSiteIds());
                } else if (diffInDays > Constants.THIRTY) {
                    list = baseMapper.orderCountByTimeRangeMonth(cityList, startTime, endTime, orderState, orderCount.getSiteIds());
                } else {
                    list = baseMapper.orderCountByTimeRange(cityList, startTime, endTime, orderState, orderCount.getSiteIds());
                }
            } catch (ParseException e) {
                list = new ArrayList<>();
            }
        }
        // 计算订单总额及总订单数量
        BigDecimal totalMoney;
        int orderNumber;
        int fakeNumber;
        if (list.isEmpty()) {
            totalMoney = BigDecimal.ZERO;
            orderNumber = 0;
            fakeNumber = 0;
        } else {
            totalMoney = list.stream().map(OrderQueryVO::getTotalPrice)
                    .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
            orderNumber = list.stream().filter(order -> order.getNumber() != null)
                    .mapToInt(OrderQueryVO::getNumber).sum();
            fakeNumber = list.stream().filter(order -> order.getFakeCount() != null)
                    .mapToInt(OrderQueryVO::getFakeCount).sum();
        }
        return new OrderResultVO(totalMoney, orderNumber, list);
        return new OrderResultVO(totalMoney, orderNumber, list,fakeNumber);
    }
    @Override
    public List<Order> excelExport(OrderQueryRequest orderQueryRequest) {
        List<String> ids = orderQueryRequest.getIds();
        List<Order> list;
        if (null != ids && !ids.isEmpty()) {
            list = baseMapper.exportByIdList(ids);
        } else {
            list = baseMapper.exportList(orderQueryRequest);
//        List<String> ids = orderQueryRequest.getIds();
//        List<Order> list;
//        if (null != ids && !ids.isEmpty()) {
//            list = baseMapper.exportByIdList(ids);
//        } else {
//            list = baseMapper.exportList(orderQueryRequest);
//        }
        List<Order> orders = baseMapper.excelExportList(orderQueryRequest);
        List<ChangeDispatch> list = changeDispatchService.lambdaQuery()
                .eq(ChangeDispatch::getIsDelete, 0)
                .orderByDesc(ChangeDispatch::getCreateTime).list();
        for (Order order : orders) {
            ChangeDispatch changeDispatch = list.stream().filter(e -> e.getOrderId().equals(order.getId()))
                    .findFirst().orElse(null);
            if (null != changeDispatch) {
                order.setApplyReason(changeDispatch.getApplyReason());
            }
        }
        return list;
        return orders;
    }
    @Override
@@ -93,12 +143,12 @@
        Page<Order> page = Page.of(orderQueryRequest.getPageNum(), orderQueryRequest.getPageSize());
        // 基础查询
        Page<Order> pageList = baseMapper.queryPage(orderQueryRequest, page);
        List<ChangeDispatch> list = changeDispatchService.lambdaQuery()
                .eq(ChangeDispatch::getIsDelete, 0)
                .orderByDesc(ChangeDispatch::getCreateTime).list();
        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();
            ChangeDispatch changeDispatch = list.stream().filter(e -> e.getOrderId().equals(order.getId()))
                    .findFirst().orElse(null);
            if (null != changeDispatch) {
                order.setApplyReason(changeDispatch.getApplyReason());
            }
@@ -106,46 +156,42 @@
        return pageList;
    }
    @Override
    public List<String> queryPage1(OrderQueryRequest orderQueryRequest) {
        Page<Order> page = Page.of(orderQueryRequest.getPageNum(), orderQueryRequest.getPageSize());
        // 基础查询
        Page<Order> pageList = baseMapper.queryPage1(orderQueryRequest, page);
        return  pageList.getRecords().stream().map(Order::getId).collect(Collectors.toList());
    }
    @Override
    public Page<OrderCountVO> orderCount(String name, String phone, Page<OrderCountVO> page) {
        return baseMapper.orderCount(name, phone, page);
    public Page<OrderCountVO> orderCount(String name, String phone, List<String> cityList, Page<OrderCountVO> page,List<String>siteIds) {
        return baseMapper.orderCount(name, phone, cityList, page, siteIds);
    }
    @Override
    public OrderPageCountVO orderPageCount(OrderQueryRequest orderQueryRequest) {
        List<Order> orderList = baseMapper.orderPageCount(orderQueryRequest);
        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++;
            }
            if (order.getIsReinvest() != null && order.getIsReinvest() == 1) {
                reInvestment++;
            }
        }
        return new OrderPageCountVO(total, toBeDispatched, stayDoorstep,
                toBeCompleted, completed, canceled, reInvestment);
        Order order = baseMapper.orderPageCount(orderQueryRequest);
            Integer toBeDispatched = order.getToBeDispatched();
            Integer stayDoorstep = order.getStayDoorstep();
            Integer toBeCompleted = order.getToBeCompleted();
            Integer completed = order.getCompleted();
            Integer canceled = order.getCanceled();
            Integer reInvestment = order.getReInvestment();
            Integer pending = order.getPending();
            int total = toBeDispatched + stayDoorstep + toBeCompleted + completed + canceled + reInvestment + pending;
            return new OrderPageCountVO(total, toBeDispatched, stayDoorstep,
                    toBeCompleted, completed, canceled, reInvestment,pending);
    }
    @Override
    public BigDecimal tradeMoney(MoneyQueryRequest moneyQueryRequest) {
        if(moneyQueryRequest.getSiteIds()==null){
            moneyQueryRequest.setSiteIds(new ArrayList<>());
        }
        List<String> cityList = moneyQueryRequest.getCityList();
        String type = moneyQueryRequest.getType();
        // 计算当前季度时间所包含时间
@@ -175,8 +221,9 @@
    }
    @Override
    public Page<Order> orderListWorker(Integer userId, Integer state, Integer pageNum, Integer pageSize) {
        return baseMapper.orderListWorker(userId, state, Page.of(pageNum, pageSize));
    public Page<Order> orderListWorker(Integer userId, Integer state,String searchValues, Integer pageNum, Integer pageSize) {
        Page<Order> orderPage = baseMapper.orderListWorker(userId, state, searchValues, Page.of(pageNum, pageSize));
        return baseMapper.orderListWorker(userId, state,searchValues, Page.of(pageNum, pageSize));
    }
    @Override
@@ -222,6 +269,9 @@
    @Override
    public Boolean placeOrder(UserOrderRequest userOrderRequest) {
        R<AddressDto> cityCode = userClient.getCityCode(userOrderRequest.getAddressId());
        // 下单参数
        String orderNumber = userOrderRequest.getOrderNumber();
        Integer serveId = userOrderRequest.getServeId();
@@ -246,7 +296,7 @@
        order.setUserId(userId);
        order.setReservationName(reservationName);
        order.setReservationPhone(reservationPhone);
        order.setReservationAddress(address);
        order.setReservationAddress(address+cityCode.getData().getName());
        order.setTime(time);
        order.setReservationRemark(reservationRemark);
        order.setOrderMoney(defaultPrice.add(new BigDecimal(String.valueOf(subsidy))));
@@ -257,11 +307,23 @@
        order.setIsWithdrawal(Constants.ZERO);
        order.setSubsidy(subsidy);
        order.setAddress(addressDetail);
        order.setIsEvaluate(Constants.ZERO);
        order.setCity(cityCode.getData().getCity());
        order.setCityCode(cityCode.getData().getCityCode());
        return this.save(order);
    }
    @Override
    public String orderEstimate(UserOrderRequest userOrderRequest) {
        R<AddressDto> cityCode = userClient.getCityCode(userOrderRequest.getAddressId());
        R<BigDecimal> servePrice = userClient.getServePrice(userOrderRequest.getServeId(), cityCode.getData().getCityCode());
        if (servePrice.getData()!=null){
            userOrderRequest.setDefaultPrice(servePrice.getData());
        }
        // 下单参数
        String orderNumber = userOrderRequest.getOrderNumber();
        Integer serveId = userOrderRequest.getServeId();
@@ -284,12 +346,13 @@
        order.setServeName(serveName);
        order.setServePrice(defaultPrice);
        order.setUserId(userId);
        order.setIsEvaluate(Constants.ZERO);
        order.setReservationName(reservationName);
        order.setReservationPhone(reservationPhone);
        if (null == userOrderRequest.getAddressId()) {
            order.setReservationAddress(addressDetail);
            order.setReservationAddress(cityCode.getData().getName()+address+cityCode.getData().getDetail());
        } else {
            order.setReservationAddress(address);
            order.setReservationAddress(address+cityCode.getData().getName()+cityCode.getData().getDetail());
        }
        order.setTime(time);
        order.setReservationRemark(reservationRemark);
@@ -304,9 +367,16 @@
        order.setLatitude(latitude);
        order.setIsWithdrawal(Constants.ZERO);
        order.setSubsidy(subsidy);
        order.setAddress(addressDetail);
        order.setAddress("");
        order.setCity(cityCode.getData().getCity());
        order.setCityCode(cityCode.getData().getCityCode());
        this.save(order);
        return String.valueOf(order.getId());
    }
    @Override
    public List<PaperInVo> papercout(String workId,String date) {
        return this.baseMapper.papercout(workId,date);
    }
    /**
@@ -323,4 +393,14 @@
            return Month.OCTOBER;
        }
    }
    /**
     * 增加发送短信次数
     * @param orderId 订单id
     */
    @Override
    public void messageCount(String orderId) {
        Order byId = this.getById(orderId);
        byId.setMsgCount(byId.getMsgCount()==null?1:byId.getMsgCount()+1);
        this.updateById(byId);
    }
}