修复 2.入库单和退货单都要显示零售价的价格。

This commit is contained in:
zjf committed 2025-09-19 15:35:24 +08:00
1 parent d98640df99
commit c4939ee479
3 files changed
+30 -14

No files matched your search

@@ -106,6 +106,10 @@ public class SmErpInventoryRecordsExcelDto {
@ExcelProperty("货商名称")
private String supplierName;
@Schema(description="零售价(元)")
@ExcelProperty("零售价(元)")
private Integer retailPrice;
@Schema(description="单价")
@ExcelProperty("单价(元)")
private Integer unitPrice;
@@ -71,7 +71,7 @@ public class SmErpInventoryRecordsSummaryExcelDto {
*/
@Schema(description="入库总金额")
@ExcelProperty("总金额(元)")
private Integer totalAmount;
private Double totalAmount;
/**
* 创建人
@@ -99,8 +99,12 @@ public class SmErpInventoryRecordsSummaryExcelDto {
@ExcelProperty("货商名称")
private String supplierName;
@Schema(description="汇总单价(元)")
@ExcelProperty("汇总单价(元)")
@Schema(description="零售价(元)")
@ExcelProperty("零售价(元)")
private Double retailPrice;
@Schema(description="汇总成本单价(元)")
@ExcelProperty("汇总成本单价(元)")
private Double averageUnitPrice;
@Schema(description="期初库存")
@@ -39,6 +39,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.DoubleStream;
@@ -1013,6 +1015,7 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
excelDto.setUnit(unit.getUnit());
excelDto.setSpec(unit.getSpec());
excelDto.setPackageNum(unit.getPackageNum());
excelDto.setRetailPrice(unit.getRetailPrice() / 100);
}
} else {
// 如果没有指定单位,获取基础单位
@@ -1024,6 +1027,7 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
excelDto.setUnit(baseUnit.getUnit());
excelDto.setSpec(baseUnit.getSpec());
excelDto.setPackageNum(baseUnit.getPackageNum());
excelDto.setRetailPrice(baseUnit.getRetailPrice() / 100);
}
}
}
@@ -1178,6 +1182,9 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
dto.setUnit(baseUnit.getUnit());
dto.setSpec(baseUnit.getSpec());
dto.setPackageNum(baseUnit.getPackageNum());
// 零售价转换为元并保留两位小数
BigDecimal retailPrice = new BigDecimal(baseUnit.getRetailPrice()).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
dto.setRetailPrice(retailPrice.doubleValue());
}
} catch (Exception e) {
// 忽略包装单位信息获取失败
@@ -1204,7 +1211,7 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
summaryDto.setTotalReceiveAmount(0);
}
if (summaryDto.getTotalAmount() == null) {
summaryDto.setTotalAmount(0);
summaryDto.setTotalAmount(0.0);
}
// 获取当前商品的包装单位信息,用于数量转换
@@ -1231,22 +1238,23 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
}
summaryDto.setTotalReceiveAmount(summaryDto.getTotalReceiveAmount() + (int) convertedQuantity);
summaryDto.setTotalAmount(summaryDto.getTotalAmount() + item.getTotalAmount());
// 将商品明细的总金额(分)转换为元并累加,使用BigDecimal确保精度
BigDecimal itemAmount = new BigDecimal(item.getTotalAmount()).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
BigDecimal currentTotal = new BigDecimal(summaryDto.getTotalAmount().toString());
summaryDto.setTotalAmount(currentTotal.add(itemAmount).doubleValue());
// 计算平均单价
// 计算平均单价,保留两位小数
if (summaryDto.getTotalReceiveAmount() > 0) {
double averagePrice = (double) summaryDto.getTotalAmount() / summaryDto.getTotalReceiveAmount() / 100.0; // 转换为元
summaryDto.setAverageUnitPrice(averagePrice);
BigDecimal totalAmount = new BigDecimal(summaryDto.getTotalAmount().toString());
BigDecimal totalQuantity = new BigDecimal(summaryDto.getTotalReceiveAmount());
BigDecimal averagePrice = totalAmount.divide(totalQuantity, 2, RoundingMode.HALF_UP);
summaryDto.setAverageUnitPrice(averagePrice.doubleValue());
}
}
}
// 转换总金额为元
for (SmErpInventoryRecordsSummaryExcelDto summaryDto : summaryMap.values()) {
if (summaryDto.getTotalAmount() != null) {
summaryDto.setTotalAmount(summaryDto.getTotalAmount() / 100);
}
}
// totalAmount在累加时已经转换为元,无需额外处理
return new ArrayList<>(summaryMap.values());
}