From 213d250d34e8bbb3b8de0aeccf051183100c0638 Mon Sep 17 00:00:00 2001 From: mashuai Date: Thu, 20 Feb 2025 22:56:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=BA=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ScrapApplyDetailsServiceImpl.java | 45 ++++++++++++++++--- .../scrap/ScrapApplyDetailsMapper.xml | 17 +++---- 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/service/impl/ScrapApplyDetailsServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/service/impl/ScrapApplyDetailsServiceImpl.java index f51cbf73..d5ad7d36 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/service/impl/ScrapApplyDetailsServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/service/impl/ScrapApplyDetailsServiceImpl.java @@ -3,10 +3,7 @@ package com.bonus.material.scrap.service.impl; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; import cn.hutool.core.collection.CollectionUtil; @@ -851,7 +848,45 @@ public class ScrapApplyDetailsServiceImpl implements IScrapApplyDetailsService { */ @Override public List getScrapList(ScrapApplyDetails scrapApplyDetails) { - return scrapApplyDetailsMapper.getScrapList(scrapApplyDetails); + List scrapTotalListVos = new ArrayList<>(); + List list = scrapApplyDetailsMapper.getScrapList(scrapApplyDetails); // 获取数据 + // 如果列表不为空,则进行处理 + if (CollectionUtils.isNotEmpty(list)) { + + // 如果用户传入了具体月份,先进行过滤 + if (StringUtils.isNotBlank(scrapApplyDetails.getMonth())) { + list = list.stream() + .filter(totalListVo -> totalListVo.getMonth().equals(scrapApplyDetails.getMonth())) + .collect(Collectors.toList()); + } + // 按月分组 + Map> groupedByMonth = list.stream() + .collect(Collectors.groupingBy(ScrapTotalListVo::getMonth)); + + // 遍历按月分组的结果 + groupedByMonth.forEach((month, monthList) -> { + ScrapTotalListVo scrapTotalListVo = new ScrapTotalListVo(); + scrapTotalListVo.setMonth(month); // 设置当前月份 + + // 重新初始化 totalCost,避免多个月份累加 + BigDecimal monthTotalCost = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP); + BigDecimal numTotalCost = BigDecimal.ZERO.setScale(3, RoundingMode.HALF_UP); + + // 累加每个月的 totalCost + for (ScrapTotalListVo totalListVo : monthList) { + monthTotalCost = monthTotalCost.add( + totalListVo.getScrapNum() + .multiply(totalListVo.getBuyPrice()) + .divide(new BigDecimal(10000), 2, RoundingMode.HALF_UP) + ); + numTotalCost = numTotalCost.add(totalListVo.getScrapNum()); + } + scrapTotalListVo.setTotalCost(monthTotalCost); // 设置总成本 + scrapTotalListVo.setScrapNum(numTotalCost); + scrapTotalListVos.add(scrapTotalListVo); // 添加到结果列表 + }); + } + return scrapTotalListVos; // 返回结果 } /** diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/scrap/ScrapApplyDetailsMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/scrap/ScrapApplyDetailsMapper.xml index 6a4ea15b..16e8c38c 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/scrap/ScrapApplyDetailsMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/scrap/ScrapApplyDetailsMapper.xml @@ -402,9 +402,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sad.scrap_type like concat('%', #{keyWord}, '%') ) - + GROUP BY @@ -490,12 +490,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" mt.type_name AS typeModelName, mt.unit_name AS unitName, mt.manage_type AS manageType, - sum( sad.scrap_num ) AS scrapNum, + sad.scrap_num AS scrapNum, mt.buy_price AS buyPrice, - GROUP_CONCAT( DISTINCT sad.create_by ) AS createName, + sad.create_by AS createName, DATE_FORMAT( sad.ledger_time, '%Y-%m' ) AS month, - sad.ledger_status AS ledgerStatus, - TRIM(TRAILING '0' FROM CAST(SUM(ROUND(mt.buy_price) * ROUND(sad.scrap_num)) / 10000 AS CHAR)) AS totalCost + sad.ledger_status AS ledgerStatus FROM scrap_apply_details sad LEFT JOIN ma_type mt ON sad.type_id = mt.type_id @@ -506,10 +505,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND DATE_FORMAT( sad.create_time, '%Y-%m' ) BETWEEN DATE_FORMAT(#{startTime}, '%Y-%m') AND DATE_FORMAT(#{endTime}, '%Y-%m') ]]> - GROUP BY - DATE_FORMAT( - sad.ledger_time, - '%Y-%m')