修复 2.入库单和退货单都要显示零售价的价格。
This commit is contained in:
1 parent
d98640df99
commit
c4939ee479
3 files changed
+30
-14
No files matched your search
+4
@@ -106,6 +106,10 @@ public class SmErpInventoryRecordsExcelDto {
|
||||
@ExcelProperty("货商名称")
|
||||
private String supplierName;
|
||||
|
||||
@Schema(description="零售价(元)")
|
||||
@ExcelProperty("零售价(元)")
|
||||
private Integer retailPrice;
|
||||
|
||||
@Schema(description="单价")
|
||||
@ExcelProperty("单价(元)")
|
||||
private Integer unitPrice;
|
||||
|
||||
+7
-3
@@ -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="期初库存")
|
||||
|
||||
+19
-11
@@ -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());
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user