From ad5fa78540fdd7b5470072e0ead2b650afdca2fd Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 17 四月 2024 17:41:28 +0800
Subject: [PATCH] 统计报表-->每日业务统计

---
 inspect-server/src/main/java/com/yuanchu/mom/service/ReportService.java           |   13 +++
 inspect-server/src/main/resources/mapper/InsOrderMapper.xml                       |    3 
 inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java           |    2 
 cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java |    8 +
 inspect-server/src/main/java/com/yuanchu/mom/controller/ReportController.java     |   35 ++++++++
 cnas-server/src/main/resources/mapper/DepartmentMapper.xml                        |    8 +
 user-server/src/main/java/com/yuanchu/mom/service/impl/UserServiceImp.java        |    2 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/ReportServiceImpl.java  |  160 ++++++++++++++++++++++++++++++++++++++++
 cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java            |    2 
 9 files changed, 227 insertions(+), 6 deletions(-)

diff --git a/cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java b/cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java
index f88d409..8a26404 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java
@@ -26,7 +26,7 @@
     List<Department> selectDepartment();
 
     //鏍规嵁閫夋嫨鐨勬爲灞曠ず鐩稿叧鐨勪汉鍛�
-    IPage<UserDto> showUserById(@Param("page") IPage<UserDto> page, @Param("ids") String ids, @Param("ew") QueryWrapper<UserDto> ew);
+    IPage<UserDto> showUserById(@Param("page") IPage<UserDto> page, @Param("ids") List<String> ids, @Param("ew") QueryWrapper<UserDto> ew);
 
     //鏍规嵁閮ㄩ棬id,鏌ヨ浠栫殑鎵�鏈夊瓙绫籭d
     List<Integer> selectSonById(Integer id);
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java
index 56e1c6d..1d9cd61 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java
@@ -15,6 +15,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yuanchu.mom.utils.QueryWrappers;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import lombok.var;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -40,6 +41,7 @@
 @Service
 @AllArgsConstructor
 @Transactional(rollbackFor = Exception.class)
+@Slf4j
 public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Department> implements DepartmentService {
 
     DepartmentMapper departmentMapper;
@@ -90,9 +92,11 @@
     public Map<String, Object> showUserById(Page page, UserDto user) {
         //鏍规嵁閮ㄩ棬id,鏌ヨ浠栫殑鎵�鏈夊瓙绫籭d
         List<Integer> list = departmentMapper.selectSonById(Integer.parseInt(user.getDepartId()));
-        String ids = list.stream()
+        List<String> ids = list.stream()
                 .map(Object::toString)
-                .collect(Collectors.joining(","));
+                //.collect(Collectors.joining(","));
+                .collect(Collectors.toList());
+        log.info(ids+"\n");
         Map<String, Object> map = new HashMap<>();
         map.put("head", PrintChina.printChina(UserDto.class));
         map.put("body", departmentMapper.showUserById(page, ids, QueryWrappers.queryWrappers(user)));
diff --git a/cnas-server/src/main/resources/mapper/DepartmentMapper.xml b/cnas-server/src/main/resources/mapper/DepartmentMapper.xml
index 465bbc1..d29cd93 100644
--- a/cnas-server/src/main/resources/mapper/DepartmentMapper.xml
+++ b/cnas-server/src/main/resources/mapper/DepartmentMapper.xml
@@ -18,7 +18,10 @@
     </select>
     <select id="showUserById" resultType="com.yuanchu.mom.dto.UserDto">
         select * from (select id, name, age, email, phone,depart_id
-        from user where FIND_IN_SET( SUBSTRING_INDEX(depart_id, ',', -1) ,#{ids}) > 0 ) a
+        from user where state=1 and SUBSTRING_INDEX(depart_id, ',', -1) in
+        <foreach collection="ids" item="id" separator="," open="(" close=")">
+            #{id}
+        </foreach> ) a
         <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
             ${ew.customSqlSegment}
         </if>
@@ -34,6 +37,7 @@
                      JOIN DepartmentHierarchy dh ON d.father_id = dh.id
         )
         SELECT id
-        FROM DepartmentHierarchy;
+        FROM DepartmentHierarchy
+        order by id desc;
     </select>
 </mapper>
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/ReportController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/ReportController.java
new file mode 100644
index 0000000..14a1e42
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/ReportController.java
@@ -0,0 +1,35 @@
+package com.yuanchu.mom.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.SampleOrderDto;
+import com.yuanchu.mom.service.ReportService;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/report")
+@Api("鎶ヨ〃妯″潡")
+public class ReportController {
+
+    private ReportService reportService;
+
+    @ApiOperation(value = "姣忔棩涓氬姟缁熻")
+    @GetMapping("/businessStatisticsByDay")
+    public Result businessStatisticsByDay(){
+        return Result.success(reportService.businessStatisticsByDay());
+    }
+
+    @ApiOperation(value = "妫�娴嬮」鐩粺璁�")
+    @GetMapping("/testProductByDay")
+    public Result testProductByDay(){
+        return Result.success(reportService.testProductByDay());
+    }
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java b/inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java
index 5c9291d..849e8ec 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java
@@ -44,6 +44,8 @@
 
     private Integer insSampleId;
 
+    private Double cost;//宸ユ椂
+
     public Integer getNum() {
         return num = 1;
     }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/ReportService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/ReportService.java
new file mode 100644
index 0000000..ba79743
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/ReportService.java
@@ -0,0 +1,13 @@
+package com.yuanchu.mom.service;
+
+
+import java.util.Map;
+
+public interface ReportService {
+
+    //姣忔棩涓氬姟缁熻
+    Map<String,Object> businessStatisticsByDay();
+
+    //妫�娴嬮」鐩粺璁�
+    Map<String,Object> testProductByDay();
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ReportServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ReportServiceImpl.java
new file mode 100644
index 0000000..820ae14
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ReportServiceImpl.java
@@ -0,0 +1,160 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.CostStatisticsDto;
+import com.yuanchu.mom.mapper.InsOrderMapper;
+import com.yuanchu.mom.mapper.InsProductMapper;
+import com.yuanchu.mom.mapper.InsProductUserMapper;
+import com.yuanchu.mom.pojo.InsOrder;
+import com.yuanchu.mom.pojo.InsProduct;
+import com.yuanchu.mom.pojo.InsProductUser;
+import com.yuanchu.mom.service.ReportService;
+import com.yuanchu.mom.utils.QueryWrappers;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@AllArgsConstructor
+public class ReportServiceImpl implements ReportService {
+
+    private InsOrderMapper insOrderMapper;
+    private InsProductUserMapper insProductUserMapper;
+    private InsProductMapper insProductMapper;
+
+    //姣忔棩涓氬姟缁熻
+    @Override
+    public Map<String, Object> businessStatisticsByDay() {
+        Map<String, Object> map = new HashMap<>();
+        /*浠诲姟鎺ユ敹*/
+        //浠婃棩浠诲姟鎺ユ敹
+        Long receive = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 1).apply("DATE(create_time) = CURDATE()"));
+        map.put("RECEIVE", receive);
+        //鏄ㄦ棩浠诲姟鎺ユ敹
+        Long received = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 1).apply("DATE(create_time) = CURDATE() - INTERVAL 1 DAY"));
+        received = received == 0 ? 1 : received;
+        //姣斾緥=(浠婂ぉ-鏄ㄥぉ)/鏄ㄥぉ
+        BigDecimal ratio = new BigDecimal(receive - received).divide(new BigDecimal(received), 2, BigDecimal.ROUND_HALF_UP);
+        map.put("RECEIVE_RATIO", ratio);
+
+        /*浠诲姟宸插畬鎴�*/
+        //浠婃棩浠诲姟瀹屾垚
+        Long finishe = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 4).apply("DATE(create_time) = CURDATE()"));
+        map.put("FINISHE", finishe);
+        //鏄ㄦ棩浠诲姟瀹屾垚
+        Long finished = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 4).apply("DATE(create_time) = CURDATE() - INTERVAL 1 DAY"));
+        finished = finished == 0 ? 1 : finished;
+        //浠诲姟瀹屾垚姣斾緥=(浠婂ぉ-鏄ㄥぉ)/鏄ㄥぉ
+        BigDecimal finishedRatio = new BigDecimal(finishe - finished).divide(new BigDecimal(finished), 2, BigDecimal.ROUND_HALF_UP);
+        map.put("FINISHE_RATIO", finishedRatio);
+
+        /*浠诲姟鍓╀綑*/
+        //浠婃棩浠诲姟鍓╀綑
+        long surplus = receive - finishe;
+        map.put("SURPLUS", surplus);
+        //鏄ㄦ棩浠诲姟鍓╀綑
+        long surplused = received - finished;
+        surplused = surplused == 0 ? 1 : surplused;
+        //鍓╀綑姣斾緥=(浠婂ぉ-鏄ㄥぉ)/鏄ㄥぉ
+        BigDecimal surplusRatio = new BigDecimal(surplus - surplused).divide(new BigDecimal(surplused), 2, BigDecimal.ROUND_HALF_UP);
+        map.put("SURPLUS_RATIO", surplusRatio);
+
+        /*妫�娴嬭垂鐢�*/
+        //浠婃棩妫�娴嬭垂鐢�
+        QueryWrapper<CostStatisticsDto> costStatisticsDtoQueryWrappers = new QueryWrapper<>();
+        costStatisticsDtoQueryWrappers.eq("create_time", LocalDateTime.now());
+        IPage<CostStatisticsDto> page = new Page<>();
+        page.setSize(-1);
+        page.setCurrent(-1);
+        IPage<CostStatisticsDto> iPage = insOrderMapper.selectCostStatistics(page, costStatisticsDtoQueryWrappers);
+        BigDecimal price = BigDecimal.ZERO;
+        for (CostStatisticsDto record : iPage.getRecords()) {
+            price.add(record.getPrice());
+        }
+        map.put("PRICE", price);
+        //鏄ㄦ棩妫�娴嬭垂鐢�
+        QueryWrapper<CostStatisticsDto> costWrappers = new QueryWrapper<>();
+        costWrappers.eq("create_time", LocalDateTime.now().minusDays(1));
+        IPage<CostStatisticsDto> dtoIPage = insOrderMapper.selectCostStatistics(page, costWrappers);
+        BigDecimal priced = BigDecimal.ZERO;
+        for (CostStatisticsDto record : dtoIPage.getRecords()) {
+            priced.add(record.getPrice());
+        }
+        priced = priced.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ONE : priced;
+        //姣斾緥=(浠婃棩-鏄ㄦ棩)/鏄ㄦ棩
+        BigDecimal priceRatio = (price.subtract(priced)).divide(priced, 2, BigDecimal.ROUND_HALF_UP);
+        map.put("PRICE_RATIO", priceRatio);
+
+        /*妫�娴嬪伐鏃�*/
+        //浠婃棩妫�娴嬪伐鏃�
+        Double cost = 0.0;
+        for (CostStatisticsDto record : iPage.getRecords()) {
+            cost += record.getCost();
+        }
+        map.put("COST", cost);
+        //鏄ㄦ棩妫�娴嬪伐鏃�
+        Double costed = 0.0;
+        for (CostStatisticsDto record : dtoIPage.getRecords()) {
+            costed += record.getCost();
+        }
+        costed = costed == 0 ? 1 : costed;
+        //姣斾緥=(浠婃棩-鏄ㄦ棩)/鏄ㄦ棩
+        BigDecimal costRatio = new BigDecimal(cost - costed).divide(new BigDecimal(costed), 2, BigDecimal.ROUND_HALF_UP);
+        map.put("COST_RATIO", costRatio);
+
+
+        /*妫�娴嬩汉鍛�*/
+        //浠婃棩妫�娴嬩汉鍛�
+        Long person = insProductUserMapper.selectCount(Wrappers.<InsProductUser>lambdaQuery().apply("DATE(create_time) = CURDATE()"));
+        map.put("PERSON", person);
+        //鏄ㄦ棩妫�娴嬩汉鍛�
+        Long persons = insProductUserMapper.selectCount(Wrappers.<InsProductUser>lambdaQuery().apply("DATE(create_time) = CURDATE() - INTERVAL 1 DAY"));
+        persons = persons == 0 ? 1 : persons;
+        //姣斾緥=(浠婂ぉ-鏄ㄥぉ)/鏄ㄥぉ
+        BigDecimal personRatio = new BigDecimal(person - persons).divide(new BigDecimal(persons), 2, BigDecimal.ROUND_HALF_UP);
+        map.put("PERSON_RATIO", personRatio);
+
+        /*杩戝崄鏃ヤ换鍔℃帴鏀堕噺涓庡畬鎴愰噺*/
+        //鑾峰彇杩戝崄鏃ョ殑妯潗鏍�
+        LocalDate currentDate = LocalDate.now();
+        List<LocalDate> lastTenDays = new ArrayList<>();
+        List<Long> receTenDays = new ArrayList<>();
+        List<Long> finTenDays = new ArrayList<>();
+        for (int i = 9; i > -1; i--) {
+            lastTenDays.add(currentDate.minusDays(i));
+            receTenDays.add(insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 1).apply("DATE(create_time) = CURDATE() - INTERVAL " + i + " DAY")));
+            finTenDays.add(insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 4).apply("DATE(create_time) = CURDATE() - INTERVAL " + i + " DAY")));
+        }
+        map.put("DAYS", lastTenDays);
+        map.put("RECETENDAYS", receTenDays);
+        map.put("FINISHTENDAYS", finTenDays);
+        return map;
+    }
+
+    //妫�娴嬮」鐩粺璁�
+    @Override
+    public Map<String, Object> testProductByDay() {
+        Map<String, Object> map = new HashMap<>();
+        /*椤圭洰鎺ユ敹*/
+        //浠婃棩椤圭洰鎺ユ敹閲�
+        Long receive = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).apply("DATE(create_time) = CURDATE()"));
+        /*椤圭洰瀹屾垚*/
+        /*椤圭洰鍓╀綑*/
+        /*浠婃棩椤圭洰鍚堟牸鐜�*/
+        /*浠婃棩椤圭洰瀹屾垚鐜�*/
+        /*浠婃棩椤圭洰寤舵湡鐜�*/
+        /*杩戝崄鏃ョ殑椤圭洰鎺ユ敹閲忎笌瀹屾垚閲�*/
+        return map;
+    }
+}
diff --git a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
index cc2e865..573ed0b 100644
--- a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -125,6 +125,7 @@
         isa.sample,
         isa.model,
         c.price,
+        c.cost,
         c.inspection_item,
         u.company,
         u.`name`,
@@ -134,7 +135,7 @@
         ins_order i
         LEFT JOIN ins_sample isa ON isa.ins_order_id = i.id
         LEFT JOIN `user` u ON u.id = i.user_id
-        LEFT JOIN (select SUM(b.price) price,b.ins_sample_id,GROUP_CONCAT(b.inspection_item SEPARATOR ',')
+        LEFT JOIN (select SUM(b.price) price, sum(b.man_hour) cost,b.ins_sample_id,GROUP_CONCAT(b.inspection_item SEPARATOR ',')
         inspection_item from (select * from ins_product where state = 1 GROUP BY ins_sample_id,man_hour_group) b GROUP
         BY b.ins_sample_id) c ON c.ins_sample_id = isa.id
         ) a
diff --git a/user-server/src/main/java/com/yuanchu/mom/service/impl/UserServiceImp.java b/user-server/src/main/java/com/yuanchu/mom/service/impl/UserServiceImp.java
index 5b8d801..d5698c6 100644
--- a/user-server/src/main/java/com/yuanchu/mom/service/impl/UserServiceImp.java
+++ b/user-server/src/main/java/com/yuanchu/mom/service/impl/UserServiceImp.java
@@ -70,11 +70,13 @@
 
     @Override
     public int updateUser(User user) {
+        user.setDepartId("1,"+user.getDepartId());
         return userMapper.updateById(user);
     }
 
     @Override
     public int addUser(User user) {
+        user.setDepartId("1,"+user.getDepartId());
         return userMapper.insert(user);
     }
 

--
Gitblit v1.9.3