From ea62f287b3a734958ff5325343f78e3fdbe60fa8 Mon Sep 17 00:00:00 2001
From: zhongnanhuang <zhongnanhuang@canrd.com>
Date: Tue, 24 Oct 2023 10:44:08 +0800
Subject: [PATCH] 利润分析接口和首页数据展示接口

---
 src/main/java/com/order/erp/common/utils/ProfitUtils.java                            |  2 +-
 src/main/java/com/order/erp/controller/IndexController.java                          | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/order/erp/controller/OrderProfitController.java                    | 42 ++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/order/erp/domain/vo/IndexDataVO.java                               | 45 +++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/order/erp/domain/vo/OrderCountVO.java                              | 22 ++++++++++++++++++++++
 src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java                    | 10 ++++++++++
 src/main/java/com/order/erp/mapper/order/OrderCompletionReportMapper.java            |  3 +++
 src/main/java/com/order/erp/mapper/order/OrderInspectionStageMapper.java             |  3 +++
 src/main/java/com/order/erp/mapper/order/OrderProfitAnalysisMapper.java              |  3 +++
 src/main/java/com/order/erp/service/order/OrderBaseInfoService.java                  |  6 ++++++
 src/main/java/com/order/erp/service/order/OrderCompletionReportService.java          |  4 ++++
 src/main/java/com/order/erp/service/order/OrderInspectionStageService.java           |  5 +++++
 src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java            |  6 ++++++
 src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java         | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------
 src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java | 12 ++++++++++++
 src/main/java/com/order/erp/service/order/impl/OrderInspectionStageServiceImpl.java  | 12 ++++++++++++
 src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java   | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 17 files changed, 355 insertions(+), 24 deletions(-)
 create mode 100644 src/main/java/com/order/erp/controller/IndexController.java
 create mode 100644 src/main/java/com/order/erp/controller/OrderProfitController.java
 create mode 100644 src/main/java/com/order/erp/domain/vo/IndexDataVO.java
 create mode 100644 src/main/java/com/order/erp/domain/vo/OrderCountVO.java

diff --git a/src/main/java/com/order/erp/common/utils/ProfitUtils.java b/src/main/java/com/order/erp/common/utils/ProfitUtils.java
index 97f1082..5715a24 100644
--- a/src/main/java/com/order/erp/common/utils/ProfitUtils.java
+++ b/src/main/java/com/order/erp/common/utils/ProfitUtils.java
@@ -28,6 +28,6 @@ public class ProfitUtils {
 
         BigDecimal customerTotalPrice = new BigDecimal(calculateVO.getCustomerTotalPrice());
 
-        return new BigDecimal(1).subtract((productionDepartmentTotalPrice.divide(exchangeRate).add(packetTotalPrice)).divide(customerTotalPrice)).doubleValue();
+        return new BigDecimal(1).subtract((productionDepartmentTotalPrice.divide(exchangeRate,4,BigDecimal.ROUND_HALF_UP).add(packetTotalPrice)).divide(customerTotalPrice,4,BigDecimal.ROUND_HALF_UP)).doubleValue();
     }
 }
diff --git a/src/main/java/com/order/erp/controller/IndexController.java b/src/main/java/com/order/erp/controller/IndexController.java
new file mode 100644
index 0000000..8b4c79f
--- /dev/null
+++ b/src/main/java/com/order/erp/controller/IndexController.java
@@ -0,0 +1,75 @@
+package com.order.erp.controller;
+
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.OrderStatusEnum;
+import com.order.erp.domain.vo.IndexDataVO;
+import com.order.erp.service.order.OrderBaseInfoService;
+import com.order.erp.service.order.OrderCompletionReportService;
+import com.order.erp.service.order.OrderInspectionStageService;
+import com.order.erp.service.order.OrderProfitAnalysisService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @author zhongnanhuang
+ * @version 1.0
+ * @project order-erp
+ * @description 首页
+ * @date 2023/10/23 16:44:55
+ */
+@RestController
+@RequestMapping("/order/erp/index")
+public class IndexController {
+
+    @Resource
+    OrderBaseInfoService orderBaseInfoService;
+
+    @Resource
+    OrderInspectionStageService orderInspectionStageService;
+
+    @Resource
+    OrderProfitAnalysisService orderProfitAnalysisService;
+
+    @Resource
+    OrderCompletionReportService orderCompletionReportService;
+
+    @GetMapping("/data")
+    public ServerResult getData(){
+        //订单总完成数
+        long orderTotalFinished = orderBaseInfoService.countByOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus());
+        //订单当月完成数
+        long orderRecentMonthFinished = orderBaseInfoService.countRecentMonthByOrderStatus(OrderStatusEnum.ORDER_FINISH.getStatus());
+
+
+        //跟单和质检中
+        long inspecting  = orderInspectionStageService.countByOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus());
+        long recentMonthInspecting  = orderInspectionStageService.countRecentMonthByOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus());
+
+        //利润分析表待审核
+        long orderProfitWaitAudit = orderProfitAnalysisService.countByOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus());
+        long orderRecentWeekProfitWaitAudit = orderProfitAnalysisService.countRecentWeekByOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus());
+
+        //项目报告书待审核
+        long orderReport = orderCompletionReportService.countByOrderStatus(OrderStatusEnum.REPORT_WAIT_AUDIT.getStatus());
+        long orderYearReport = orderCompletionReportService.countYearByOrderStatus(OrderStatusEnum.REPORT_WAIT_AUDIT.getStatus());
+
+        //当天订单数据
+        IndexDataVO.ChartData chartData = orderBaseInfoService.countHoursFromDay();
+
+        IndexDataVO indexDataVo = new IndexDataVO();
+        indexDataVo.setOrderFinishedCount(orderTotalFinished);
+        indexDataVo.setOrderRecentMonthFinishedCount(orderRecentMonthFinished);
+        indexDataVo.setOrderInspectingCount(inspecting);
+        indexDataVo.setOrderRecentMonthInspectingCount(recentMonthInspecting);
+        indexDataVo.setOrderProfitWaitAuditCount(orderProfitWaitAudit);
+        indexDataVo.setOrderRecentWeekProfitWaitAuditCount(orderRecentWeekProfitWaitAudit);
+        indexDataVo.setOrderReportWaitAuditCount(orderReport);
+        indexDataVo.setOrderReportRecentYearWaitAuditCount(orderYearReport);
+        indexDataVo.setChartData(chartData);
+
+        return ServerResult.success(indexDataVo);
+    }
+}
diff --git a/src/main/java/com/order/erp/controller/OrderProfitController.java b/src/main/java/com/order/erp/controller/OrderProfitController.java
new file mode 100644
index 0000000..96d3940
--- /dev/null
+++ b/src/main/java/com/order/erp/controller/OrderProfitController.java
@@ -0,0 +1,42 @@
+package com.order.erp.controller;
+
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.dto.order.OrderProfitAnalysisDO;
+import com.order.erp.service.order.OrderProfitAnalysisService;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author zhongnanhuang
+ * @version 1.0
+ * @project order-erp
+ * @description 订单利润表控制层
+ * @date 2023/10/23 11:48:36
+ */
+@RestController
+@RequestMapping("/order/erp/profit")
+public class OrderProfitController {
+
+    @Resource
+    OrderProfitAnalysisService orderProfitAnalysisService;
+
+    @PostMapping("/analysis")
+    public ServerResult analysis(@RequestBody List<Long> orderIds){
+        if (orderIds==null||orderIds.size()<=0){
+            return ServerResult.fail("订单不能为空");
+        }
+
+        OrderProfitAnalysisDO orderProfitAnalysisDO = orderProfitAnalysisService.analysisByOrderIds(orderIds);
+
+        if (orderProfitAnalysisDO==null){
+            return ServerResult.fail("找不到订单信息");
+        }
+
+        return ServerResult.success(orderProfitAnalysisDO);
+    }
+}
diff --git a/src/main/java/com/order/erp/domain/vo/IndexDataVO.java b/src/main/java/com/order/erp/domain/vo/IndexDataVO.java
new file mode 100644
index 0000000..f583c19
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/IndexDataVO.java
@@ -0,0 +1,45 @@
+package com.order.erp.domain.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author zhongnanhuang
+ * @version 1.0
+ * @project order-erp
+ * @description 首页数据展示
+ * @date 2023/10/24 09:03:20
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+public class IndexDataVO {
+    private Long orderFinishedCount;
+
+    private Long orderRecentMonthFinishedCount;
+
+    private Long orderInspectingCount;
+
+    private Long orderRecentMonthInspectingCount;
+
+    private Long orderProfitWaitAuditCount;
+
+    private Long  orderRecentWeekProfitWaitAuditCount;
+
+    private Long orderReportWaitAuditCount;
+
+    private Long orderReportRecentYearWaitAuditCount;
+
+    private ChartData chartData;
+
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class ChartData{
+        private String[] x;//小时
+        private int[] y;//订单量
+    }
+}
diff --git a/src/main/java/com/order/erp/domain/vo/OrderCountVO.java b/src/main/java/com/order/erp/domain/vo/OrderCountVO.java
new file mode 100644
index 0000000..8f606c7
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/OrderCountVO.java
@@ -0,0 +1,22 @@
+package com.order.erp.domain.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author zhongnanhuang
+ * @version 1.0
+ * @project order-erp
+ * @description 订单每日数据
+ * @date 2023/10/24 10:28:59
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class OrderCountVO {
+    private String hour;
+    private Integer count;
+}
diff --git a/src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java b/src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java
index d78cb76..e4bc0ee 100644
--- a/src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java
+++ b/src/main/java/com/order/erp/mapper/order/OrderBaseInfoMapper.java
@@ -1,7 +1,12 @@
 package com.order.erp.mapper.order;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.order.erp.domain.OrderStatusEnum;
 import com.order.erp.domain.dto.order.OrderBaseInfoDO;
+import com.order.erp.domain.vo.OrderCountVO;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * 订单基础信息表(OrderBaseInfo)表数据库访问层
@@ -12,5 +17,10 @@ import com.order.erp.domain.dto.order.OrderBaseInfoDO;
 public interface OrderBaseInfoMapper extends BaseMapper<OrderBaseInfoDO> {
 
 
+    @Select("SELECT count(*) FROM order_base_info WHERE order_status=#{orderStatus} and DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(create_time);")
+    long countRecentMonthByOrderStatus(Integer orderStatus);
+
+    @Select("SELECT HOUR(create_time) AS hour, COUNT(*) AS count FROM order_base_info WHERE create_time >= DATE_SUB(NOW(), INTERVAL 1 DAY) GROUP BY HOUR(create_time);")
+    List<OrderCountVO> countHoursFromDay();
 }
 
diff --git a/src/main/java/com/order/erp/mapper/order/OrderCompletionReportMapper.java b/src/main/java/com/order/erp/mapper/order/OrderCompletionReportMapper.java
index 297dbb7..a1800c7 100644
--- a/src/main/java/com/order/erp/mapper/order/OrderCompletionReportMapper.java
+++ b/src/main/java/com/order/erp/mapper/order/OrderCompletionReportMapper.java
@@ -2,6 +2,7 @@ package com.order.erp.mapper.order;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.order.erp.domain.dto.order.OrderCompletionReportDO;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * 订单-项目完成报告书(OrderCompletionReport)表数据库访问层
@@ -12,5 +13,7 @@ import com.order.erp.domain.dto.order.OrderCompletionReportDO;
 public interface OrderCompletionReportMapper extends BaseMapper<OrderCompletionReportDO> {
 
 
+    @Select("SELECT count(*) FROM order_completion_report WHERE order_status=20 and create_time >= DATE_SUB(NOW(), INTERVAL 1 YEAR);SELECT * FROM order_completion_report WHERE order_status=#{status} and create_time >= DATE_SUB(NOW(), INTERVAL 1 YEAR);")
+    long countYearByOrderStatus(Integer status);
 }
 
diff --git a/src/main/java/com/order/erp/mapper/order/OrderInspectionStageMapper.java b/src/main/java/com/order/erp/mapper/order/OrderInspectionStageMapper.java
index 9062559..7b34792 100644
--- a/src/main/java/com/order/erp/mapper/order/OrderInspectionStageMapper.java
+++ b/src/main/java/com/order/erp/mapper/order/OrderInspectionStageMapper.java
@@ -2,6 +2,7 @@ package com.order.erp.mapper.order;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.order.erp.domain.dto.order.OrderInspectionStageDO;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * 订单-质检环节(OrderInspectionStage)表数据库访问层
@@ -12,5 +13,7 @@ import com.order.erp.domain.dto.order.OrderInspectionStageDO;
 public interface OrderInspectionStageMapper extends BaseMapper<OrderInspectionStageDO> {
 
 
+    @Select("SELECT count(*) FROM order_inspection_stage WHERE order_status=#{status} and DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(create_time);")
+    long countRecentMonthByOrderStatus(Integer status);
 }
 
diff --git a/src/main/java/com/order/erp/mapper/order/OrderProfitAnalysisMapper.java b/src/main/java/com/order/erp/mapper/order/OrderProfitAnalysisMapper.java
index 0b70295..3852a63 100644
--- a/src/main/java/com/order/erp/mapper/order/OrderProfitAnalysisMapper.java
+++ b/src/main/java/com/order/erp/mapper/order/OrderProfitAnalysisMapper.java
@@ -2,6 +2,7 @@ package com.order.erp.mapper.order;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.order.erp.domain.dto.order.OrderProfitAnalysisDO;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * 订单利润分析表(OrderProfitAnalysis)表数据库访问层
@@ -12,5 +13,7 @@ import com.order.erp.domain.dto.order.OrderProfitAnalysisDO;
 public interface OrderProfitAnalysisMapper extends BaseMapper<OrderProfitAnalysisDO> {
 
 
+    @Select("SELECT count(*) FROM order_profit_analysis WHERE order_status=#{status} and create_time >= DATE_SUB(NOW(), INTERVAL 1 WEEK);")
+    long countRecentWeekByOrderStatus(Integer status);
 }
 
diff --git a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
index ac010dd..cc9de94 100644
--- a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
+++ b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.order.erp.common.constant.ServerResult;
 import com.order.erp.common.excel4j.exceptions.Excel4JException;
 import com.order.erp.domain.dto.order.OrderBaseInfoDO;
+import com.order.erp.domain.vo.IndexDataVO;
 import com.order.erp.domain.vo.order.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -80,4 +81,9 @@ public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> {
      */
     ServerResult deleteById(OrderBaseInfoQueryVO orderBaseInfoQueryVO);
 
+    long countByOrderStatus(Integer orderFinish);
+
+    long countRecentMonthByOrderStatus(Integer orderFinish);
+
+    IndexDataVO.ChartData countHoursFromDay();
 }
diff --git a/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java b/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java
index 1117487..2abaf5f 100644
--- a/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java
+++ b/src/main/java/com/order/erp/service/order/OrderCompletionReportService.java
@@ -59,4 +59,8 @@ public interface OrderCompletionReportService extends IService<OrderCompletionRe
     boolean deleteByOrderId(Long orderId);
 
     boolean deleteByOrderIds(List<Long> orderIds);
+
+    long countByOrderStatus(Integer status);
+
+    long countYearByOrderStatus(Integer status);
 }
diff --git a/src/main/java/com/order/erp/service/order/OrderInspectionStageService.java b/src/main/java/com/order/erp/service/order/OrderInspectionStageService.java
index 2ebbdde..625753d 100644
--- a/src/main/java/com/order/erp/service/order/OrderInspectionStageService.java
+++ b/src/main/java/com/order/erp/service/order/OrderInspectionStageService.java
@@ -2,6 +2,7 @@ package com.order.erp.service.order;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.OrderStatusEnum;
 import com.order.erp.domain.dto.order.OrderInspectionStageDO;
 import com.order.erp.domain.vo.order.OrderInspectionStageQueryVO;
 import com.order.erp.domain.vo.order.OrderInspectionStageVO;
@@ -59,4 +60,8 @@ public interface OrderInspectionStageService extends IService<OrderInspectionSta
     boolean deleteByOrderId(Long orderId);
 
     boolean deleteByOrderIds(List<Long> orderIds);
+
+    long countByOrderStatus(Integer orderStatus);
+
+    long countRecentMonthByOrderStatus(Integer status);
 }
diff --git a/src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java b/src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java
index eb4579a..0a88689 100644
--- a/src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java
+++ b/src/main/java/com/order/erp/service/order/OrderProfitAnalysisService.java
@@ -59,4 +59,10 @@ public interface OrderProfitAnalysisService extends IService<OrderProfitAnalysis
     boolean deleteByOrderId(Long orderId);
 
     boolean deleteByOrderIds(List<Long> orderIds);
+
+    OrderProfitAnalysisDO analysisByOrderIds(List<Long> orderIds);
+
+    long countByOrderStatus(Integer status);
+
+    long countRecentWeekByOrderStatus(Integer status);
 }
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
index b56e99a..1d42f7d 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
@@ -26,20 +26,20 @@ import com.order.erp.domain.OrderStatusEnum;
 import com.order.erp.domain.dto.BaseDO;
 import com.order.erp.domain.dto.order.*;
 import com.order.erp.domain.excel.OrderExcelVO;
+import com.order.erp.domain.vo.IndexDataVO;
+import com.order.erp.domain.vo.OrderCountVO;
 import com.order.erp.domain.vo.order.*;
 import com.order.erp.mapper.order.OrderBaseInfoMapper;
 import com.order.erp.service.order.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -553,6 +553,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
      * @return 是否成功
      */
     @Override
+    @Transactional
     public ServerResult deleteById(OrderBaseInfoQueryVO orderBaseInfoQueryVO) {
         List<Long> ids = orderBaseInfoQueryVO.getIds();
         if (CollUtil.isEmpty(ids)) {
@@ -571,39 +572,65 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
 
 
         //删除订单关联信息
-        this.deleteRelationInfoByOrderId(ids);
-
-
-        return ServerResult.success();
-    }
-
-    /**
-     * 删除订单关联信息
-     * @param orderId
-     */
-    private void deleteRelationInfoByOrderId(List<Long> orderIds) {
         //订单审批日志
-        orderAuditLogService.deleteByOrderIds(orderIds);
+        orderAuditLogService.deleteByOrderIds(ids);
 
         //订单-项目完成报告书
-        orderCompletionReportService.deleteByOrderIds(orderIds);
+        orderCompletionReportService.deleteByOrderIds(ids);
 
         //用户订单-字段锁定申请表
-        orderFieldLockApplyService.deleteByOrderIds(orderIds);
+        orderFieldLockApplyService.deleteByOrderIds(ids);
 
         //用户订单-字段锁定记录表
-        orderFieldLockRecordService.deleteByOrderIds(orderIds);
+        orderFieldLockRecordService.deleteByOrderIds(ids);
 
         //订单-质检环节
-        orderInspectionStageService.deleteByOrderIds(orderIds);
+        orderInspectionStageService.deleteByOrderIds(ids);
 
         //用户订单操作日志表
-        orderOptLogService.deleteByOrderIds(orderIds);
+        orderOptLogService.deleteByOrderIds(ids);
 
         //订单利润分析表
-        profitAnalysisService.deleteByOrderIds(orderIds);
+        profitAnalysisService.deleteByOrderIds(ids);
 
         //订单-跟单环节
-        trackStageService.deleteByOrderIds(orderIds);
+        trackStageService.deleteByOrderIds(ids);
+
+
+        return ServerResult.success();
+    }
+
+    /**
+     * 根据订单状态统计订单数量
+     * @param orderStatus
+     * @return
+     */
+    @Override
+    public long countByOrderStatus(Integer orderStatus) {
+        return this.count(new LambdaQueryWrapper<OrderBaseInfoDO>().eq(OrderBaseInfoDO::getOrderStatus,orderStatus));
     }
+
+    @Override
+    public long countRecentMonthByOrderStatus(Integer orderStatus) {
+        return this.baseMapper.countRecentMonthByOrderStatus(orderStatus);
+    }
+
+    @Override
+    public IndexDataVO.ChartData countHoursFromDay() {
+        List<OrderCountVO> orderCountVOS = this.baseMapper.countHoursFromDay();
+        Map<String,Integer> countValueMap = new HashMap<>();
+        if (orderCountVOS!=null&& orderCountVOS.size()>0){
+            for (OrderCountVO orderCountVO : orderCountVOS) {
+                countValueMap.put(orderCountVO.getHour(),orderCountVO.getCount());
+            }
+        }
+        String[] x = new String[24];
+        int[] y = new int[24];
+        for (int i = 0; i < 24; i++) {
+            x[i] = i+":00";
+            y[i] = countValueMap.get(i+"")==null?0:countValueMap.get(i+"");
+        }
+        return new IndexDataVO.ChartData(x,y);
+    }
+
 }
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java
index 3931ac5..bea954c 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java
@@ -2,6 +2,7 @@ package com.order.erp.service.order.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.order.erp.common.constant.Constant;
@@ -143,4 +144,15 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio
 
         return update(updateWrapper);
     }
+
+    @Override
+    public long countByOrderStatus(Integer status) {
+        return baseMapper.selectCount(new LambdaQueryWrapper<OrderCompletionReportDO>()
+                .eq(OrderCompletionReportDO::getOrderStatus, status));
+    }
+
+    @Override
+    public long countYearByOrderStatus(Integer status) {
+        return baseMapper.countYearByOrderStatus(status);
+    }
 }
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderInspectionStageServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderInspectionStageServiceImpl.java
index 29d0c5f..e3dd8b8 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderInspectionStageServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderInspectionStageServiceImpl.java
@@ -2,10 +2,12 @@ package com.order.erp.service.order.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.order.erp.common.constant.Constant;
 import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.OrderStatusEnum;
 import com.order.erp.domain.dto.order.OrderInspectionStageDO;
 import com.order.erp.domain.vo.order.OrderInspectionStageQueryVO;
 import com.order.erp.domain.vo.order.OrderInspectionStageVO;
@@ -136,4 +138,14 @@ public class OrderInspectionStageServiceImpl extends ServiceImpl<OrderInspection
                 .set(OrderInspectionStageDO::getEnableFlag, Constant.UNABLE_TWENTY);
         return update(updateWrapper);
     }
+
+    @Override
+    public long countByOrderStatus(Integer orderStatus) {
+        return this.count(new LambdaQueryWrapper<OrderInspectionStageDO>().eq(OrderInspectionStageDO::getOrderStatus,orderStatus));
+    }
+
+    @Override
+    public long countRecentMonthByOrderStatus(Integer status) {
+        return this.baseMapper.countRecentMonthByOrderStatus(status);
+    }
 }
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java
index bea4d13..389ff91 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderProfitAnalysisServiceImpl.java
@@ -2,18 +2,26 @@ package com.order.erp.service.order.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.order.erp.common.constant.Constant;
 import com.order.erp.common.constant.ServerResult;
+import com.order.erp.common.utils.ProfitUtils;
 import com.order.erp.domain.dto.order.OrderProfitAnalysisDO;
 import com.order.erp.domain.vo.order.OrderProfitAnalysisQueryVO;
 import com.order.erp.domain.vo.order.OrderProfitAnalysisVO;
+import com.order.erp.domain.vo.order.ProfitCalculateVO;
 import com.order.erp.mapper.order.OrderProfitAnalysisMapper;
 import com.order.erp.service.order.OrderProfitAnalysisService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 
@@ -141,4 +149,52 @@ public class OrderProfitAnalysisServiceImpl extends ServiceImpl<OrderProfitAnaly
                 .set(OrderProfitAnalysisDO::getEnableFlag, Constant.UNABLE_TWENTY);
         return update(updateWrapper);
     }
+
+    @Override
+    public OrderProfitAnalysisDO analysisByOrderIds(List<Long> orderIds) {
+        //查询订单id的利润分析数据
+        QueryWrapper queryWrapper = new QueryWrapper<OrderProfitAnalysisVO>().in("order_id", orderIds);
+        List<OrderProfitAnalysisDO> orderProfits = list(queryWrapper);
+
+
+        if (orderProfits==null||orderProfits.isEmpty()){
+            return null;
+        }
+
+        BigDecimal packetTotalPrice = new BigDecimal("0");
+        BigDecimal customerTotalPrice = new BigDecimal("0");
+        BigDecimal productionDepartmentTotalPrice = new BigDecimal("0");
+        double profits = 0;
+        //分别计算每个orderProfit的利润率,通过ProfitUtils的calculateProfitRate方法计算
+        for (OrderProfitAnalysisDO orderProfit : orderProfits) {
+            ProfitCalculateVO profitCalculateVO = new ProfitCalculateVO();
+            BeanUtils.copyProperties(orderProfit,profitCalculateVO);
+            double profit = ProfitUtils.calculateProfitRate(profitCalculateVO);
+
+            packetTotalPrice = packetTotalPrice.add(new BigDecimal(orderProfit.getPacketTotalPrice()));
+            customerTotalPrice = customerTotalPrice.add(new BigDecimal(orderProfit.getCustomerTotalPrice()));
+            productionDepartmentTotalPrice = productionDepartmentTotalPrice.add(new BigDecimal(orderProfit.getProductionDepartmentTotalPrice()));
+            profits+=profit;
+        }
+
+        profits = (profits / orderProfits.size());
+
+        OrderProfitAnalysisDO orderProfitAnalysisDO = new OrderProfitAnalysisDO();
+        orderProfitAnalysisDO.setPacketTotalPrice(packetTotalPrice.doubleValue());
+        orderProfitAnalysisDO.setCustomerTotalPrice(customerTotalPrice.doubleValue());
+        orderProfitAnalysisDO.setProductionDepartmentTotalPrice(productionDepartmentTotalPrice.doubleValue());
+        orderProfitAnalysisDO.setProfitRate(profits);
+
+        return orderProfitAnalysisDO;
+    }
+
+    @Override
+    public long countByOrderStatus(Integer status) {
+        return this.count(new LambdaQueryWrapper<OrderProfitAnalysisDO>().eq(OrderProfitAnalysisDO::getOrderStatus,status));
+    }
+
+    @Override
+    public long countRecentWeekByOrderStatus(Integer status) {
+        return this.baseMapper.countRecentWeekByOrderStatus(status);
+    }
 }
--
libgit2 0.23.3