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