From ecca9ab70a9a87bcb60977c92fbf81053b8fc1bb Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 04 九月 2024 09:17:55 +0800
Subject: [PATCH] 新增优化

---
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java |  279 +++++++++++++++++++++++++------------------------------
 1 files changed, 125 insertions(+), 154 deletions(-)

diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java
index f29415d..cd54160 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java
@@ -4,30 +4,38 @@
 import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.write.builder.ExcelWriterBuilder;
 import com.alibaba.excel.write.metadata.WriteSheet;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.admin.entity.*;
 import com.ruoyi.admin.mapper.OrderMapper;
 import com.ruoyi.admin.mapper.UserMapper;
-import com.ruoyi.admin.request.OrderCountRequest;
-import com.ruoyi.admin.request.OrderQueryRequest;
-import com.ruoyi.admin.service.*;
+import com.ruoyi.admin.service.MasterWorkerService;
+import com.ruoyi.admin.service.OrderService;
+import com.ruoyi.admin.service.RecoveryClassifyService;
+import com.ruoyi.admin.service.RecoveryServeService;
 import com.ruoyi.admin.vo.*;
 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.exception.GlobalException;
+import com.ruoyi.order.api.entity.OrderQueryRequest;
+import com.ruoyi.order.api.entity.ServeRecord;
+import com.ruoyi.order.api.feignClient.EvaluateClient;
+import com.ruoyi.order.api.feignClient.OrderClient;
+import com.ruoyi.order.api.feignClient.ServeRecordClient;
 import org.apache.commons.codec.CharEncoding;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -53,72 +61,30 @@
     @Resource
     private MasterWorkerService masterWorkerService;
     @Resource
-    private ServeRecordService serveRecordService;
+    private OrderClient orderClient;
     @Resource
-    private ServeCoordinateService serveCoordinateService;
+    private EvaluateClient evaluateClient;
     @Resource
-    private EvaluateService evaluateService;
+    private ServeRecordClient serveRecordClient;
+
+    /**
+     * linux服务器保存订单轨迹文件夹
+     */
+    private static final String BASE_PATH = "/usr/local/coordinate/";
+//    private static final String BASE_PATH = "D:/Desktop/coordinate/";
 
     @Override
-    public OrderResultVO orderCountHome(OrderCountRequest orderCount) {
-        List<String> cityList = orderCount.getCityList();
-        Integer orderState = orderCount.getOrderState();
-        String countType = orderCount.getCountType();
-        String startTime = orderCount.getStartTime();
-        String endTime = orderCount.getEndTime();
-        List<OrderQueryVO> list;
-        // 根据查询类型查询订单信息
-        if (OrderConstants.YEAR.equals(countType)) {
-            list = baseMapper.orderCountByYear(cityList, orderState, startTime, endTime);
-        } else if (OrderConstants.MONTH.equals(countType)) {
-            list = baseMapper.orderCountByMonth(cityList, orderState, startTime, endTime);
-        } else if (OrderConstants.WEEK.equals(countType)) {
-            list = baseMapper.orderCountByWeek(cityList, orderState, startTime, endTime);
-        } else if (OrderConstants.TODAY.equals(countType)) {
-            list = baseMapper.orderCountByToday(cityList, orderState, startTime, endTime);
-        } else {
-            list = new ArrayList<>();
-        }
-        // 计算订单总额及总订单数量
-        BigDecimal totalMoney;
-        int orderNumber;
-        if (list.isEmpty()) {
-            totalMoney = BigDecimal.ZERO;
-            orderNumber = 0;
-        } else {
-            totalMoney = list.stream().map(OrderQueryVO::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-            orderNumber = list.stream().map(OrderQueryVO::getNumber).collect(Collectors.toList()).stream().mapToInt(Integer::intValue).sum();
-        }
-        return new OrderResultVO(totalMoney, orderNumber, list);
-    }
-
-    @Override
-    public BigDecimal totalMoneyByQuarter(String startDateStr, String endDateStr, List<String> cityList) {
-        return baseMapper.totalMoneyByQuarter(startDateStr, endDateStr, cityList);
-    }
-
-    @Override
-    public BigDecimal totalMoneyByYear(List<String> cityList) {
-        return baseMapper.totalMoneyByYear(cityList);
-    }
-
-    @Override
-    public BigDecimal totalMoneyByMonth(List<String> cityList) {
-        return baseMapper.totalMoneyByMonth(cityList);
-    }
-
-    @Override
-    public R<String> excelExport(List<String> idList, HttpServletResponse response) {
+    public R<String> excelExport(List<com.ruoyi.order.api.entity.Order> list, HttpServletResponse response) {
         try {
             response.setCharacterEncoding(Constants.UTF8);
-            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setContentType("application/vnd.ms-excel");
             response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
-            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(Constants.EXCEL_ORDER_FILE_NAME, CharEncoding.UTF_8) + ".xlsx");
+            response.setHeader("Content-Disposition", "attachment;filename=" +
+                    URLEncoder.encode(Constants.EXCEL_ORDER_FILE_NAME, CharEncoding.UTF_8) + ".xlsx");
         } catch (UnsupportedEncodingException e) {
             return R.fail("excel导出失败!");
         }
         try {
-            List<Order> list = lambdaQuery().in(Order::getId, idList).eq(Order::getIsDelete, 0).list();
             // excel模板封装
             ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream());
             InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" + Constants.EXCEL_ORDER_FILE_NAME + ".xlsx");
@@ -137,16 +103,9 @@
     }
 
     @Override
-    public IPage<Order> queryPage(OrderQueryRequest orderQueryRequest) {
-        Page<Order> page = Page.of(orderQueryRequest.getPageNum(), orderQueryRequest.getPageSize());
-        // 基础查询
-        return baseMapper.queryPage(orderQueryRequest, page);
-    }
-
-    @Override
     public OrderDetailVO orderListDetail(String id) {
         OrderDetailVO result = new OrderDetailVO();
-        Order order = this.getById(id);
+        com.ruoyi.order.api.entity.Order order = orderClient.detail(id).getData();
         orderInfo(result, order);
         // 预约人信息
         userInfo(result, order);
@@ -161,124 +120,136 @@
         return result;
     }
 
-    private void evaluateInfo(OrderDetailVO result, Order order) {
-        Evaluate evaluate = evaluateService.lambdaQuery().eq(Evaluate::getOrderId, order.getId())
-                .eq(Evaluate::getIsDelete, 0).one();
+    private void evaluateInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
+        com.ruoyi.order.api.entity.Evaluate evaluate = evaluateClient.oneByOrderId(order.getId()).getData();
         OrderByEvaluateVO orderByEvaluate = new OrderByEvaluateVO();
-        orderByEvaluate.setStarRating(evaluate.getStarRating());
-        orderByEvaluate.setEvaluateTime(evaluate.getCreateTime());
-        orderByEvaluate.setEvaluateContent(evaluate.getContent());
+        if (null != evaluate) {
+            orderByEvaluate.setStarRating(BigDecimal.valueOf(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();
+    private void serveRecordInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
         OrderByServeRecordVO orderByServeRecord = new OrderByServeRecordVO();
         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 != order.getArriveTime()) {
+            orderByServeRecord.setReachTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(order.getArriveTime()));
+        }
+        // 服务记录 包含现场照片
+        ServeRecord serveRecord = serveRecordClient.serveRecordByOrderId(order.getId()).getData();
+        // 师傅路线轨迹
+        String masterFolderPath = BASE_PATH + order.getServerId();
+        File masterFolder = new File(masterFolderPath);
+        // 检查师傅ID的文件夹是否存在,存在就读取轨迹数据
+        System.out.println("文件是否存在:" + masterFolder.exists());
+        if (masterFolder.exists()) {
+            // 检查订单ID的JSON文件是否存在,不存在则创建
+            String jsonFilePath = masterFolderPath + "/" + order.getId() + ".json";
+            File jsonFile = new File(jsonFilePath);
+            System.out.println("订单Json文件是否存在:" + jsonFile.exists());
+            if (jsonFile.exists()) {
+                try {
+                    String jsonContent = new String(Files.readAllBytes(Paths.get(jsonFilePath)));
+                    System.out.println("JSON 文件内容:" + jsonContent);
+                    List<JSONObject> coordinate = JSONObject.parseObject(jsonContent, List.class);
+                    List<String> coordinateList = new ArrayList<>();
+                    if (null != coordinate) {
+                        for (JSONObject jsonObject : coordinate) {
+                            Object s = jsonObject.get("coordinate");
+                            coordinateList.add(String.valueOf(s));
+                        }
+                        orderByServeRecord.setCoordinate(coordinateList);
+                    }
+                } catch (IOException e) {
+                    System.out.println(e.getMessage());
+                }
+            }
+        }
+        if (null != serveRecord) {
+            orderByServeRecord.setPhoto(Arrays.stream(serveRecord.getPhoto().split(",")).collect(Collectors.toList()));
+            orderByServeRecord.setCardPic(serveRecord.getCardPic());
+            orderByServeRecord.setPaperPic(serveRecord.getPaperPic());
+            orderByServeRecord.setMachinePic(serveRecord.getMachinePic());
+        }
         result.setServeRecordInfo(orderByServeRecord);
     }
 
-    private void workerInfo(OrderDetailVO result, Order order) {
+    private void workerInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
         MasterWorker worker = masterWorkerService.getById(order.getServerId());
-        if (null == worker) {
-            throw new GlobalException("服务人员信息异常,请重试");
-        }
         OrderByWorkerVO orderByWorker = new OrderByWorkerVO();
-        orderByWorker.setProfilePicture(worker.getProfilePicture());
-        orderByWorker.setName(worker.getRealName());
-        orderByWorker.setPhone(worker.getPhone());
-        orderByWorker.setSex(worker.getSex());
+        if (null != worker) {
+            orderByWorker.setProfilePicture(worker.getProfilePicture());
+            orderByWorker.setName(worker.getRealName());
+            orderByWorker.setPhone(worker.getPhone());
+            orderByWorker.setSex(worker.getSex());
+        } else {
+            orderByWorker.setName(order.getServerName());
+            orderByWorker.setPhone(order.getServerPhone());
+        }
         result.setWorkerInfo(orderByWorker);
     }
 
-    private void serveInfo(OrderDetailVO result, Order order) {
+    private void serveInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
         RecoveryServe recoveryServe = recoveryServeService.getById(order.getServeId());
-        if (null == recoveryServe) {
-            throw new GlobalException("回收服务信息异常,请重试");
-        }
-        RecoveryClassify recoveryClassify = recoveryClassifyService.getById(recoveryServe.getClassifyId());
-        if (null == recoveryClassify) {
-            throw new GlobalException("回收服务分类信息异常,请重试");
-        }
         OrderByServeVO orderByServe = new OrderByServeVO();
-        orderByServe.setServeName(recoveryServe.getServeName());
-        orderByServe.setSupClassify(recoveryClassify.getSupClassify());
-        orderByServe.setSubClassify(recoveryClassify.getSubClassify());
+        if (null != recoveryServe) {
+            RecoveryClassify recoveryClassify = recoveryClassifyService.getById(recoveryServe.getClassifyId());
+            orderByServe.setServeName(recoveryServe.getServeName());
+            orderByServe.setCover(recoveryServe.getCover());
+            if (null != recoveryClassify) {
+                orderByServe.setSupClassify(recoveryClassify.getSupClassify());
+                orderByServe.setSubClassify(recoveryClassify.getSubClassify());
+            }
+        } else {
+            orderByServe.setServeName(order.getServeName());
+        }
         orderByServe.setPrice(order.getServePrice());
+        orderByServe.setSubsidy(order.getSubsidy());
         result.setServeInfo(orderByServe);
     }
 
-    private void orderInfo(OrderDetailVO result, Order order) {
-        if (null == order) {
-            throw new GlobalException("订单信息异常,请重试");
-        }
+    private void orderInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
         // 订单信息
         OrderInfoVO orderInfo = new OrderInfoVO();
-        orderInfo.setOrderNumber(order.getOrderNumber());
-        orderInfo.setPlaceOrderTime(order.getTime());
-        orderInfo.setState(order.getState());
+        if (null != order) {
+            orderInfo.setOrderNumber(order.getOrderNumber());
+            orderInfo.setPlaceOrderTime(order.getCreateTime());
+            orderInfo.setState(order.getState());
+            orderInfo.setReservationRemark(order.getReservationRemark());
+        }
         result.setOrderInfo(orderInfo);
     }
 
-    private void userInfo(OrderDetailVO result, Order order) {
+    private void userInfo(OrderDetailVO result, com.ruoyi.order.api.entity.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());
+        if (order.getAddress()!=null) {
+            orderByUserInfo.setReservationAddress(order.getReservationAddress() + order.getAddress());
+        }else {
+            orderByUserInfo.setReservationAddress(order.getReservationAddress());
+        }
         orderByUserInfo.setTime(order.getTime());
         result.setUserInfo(orderByUserInfo);
     }
-
+    /**
+     * 订单id列表
+     *
+     * @param orderQueryRequest 订单列表查询参数
+     *  @return 订单id列表
+     */
     @Override
-    public IPage<OrderCountVO> orderCount(String name, String phone, Page<OrderCountVO> page) {
-        return baseMapper.orderCount(name, phone, page);
-    }
-
-    @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++;
-            } else if (Constants.FIVE.equals(state)) {
-                reInvestment++;
-            }
-        }
-        return new OrderPageCountVO(total, toBeDispatched, stayDoorstep,
-                toBeCompleted, completed, canceled, reInvestment);
+    public List<String> queryIdList(OrderQueryRequest orderQueryRequest) {
+        // 基础查询
+        Page<com.ruoyi.order.api.entity.Order> pageList = orderClient.queryPage(orderQueryRequest).getData();
+        return pageList.getRecords().stream().map(com.ruoyi.order.api.entity.Order::getId).collect(Collectors.toList());
     }
 }

--
Gitblit v1.7.1