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