refactor(sip): 重构项目订单信息导出功能
- 提取公共方法 addBasicFields 和 processProducts 以简化代码结构 - 使用 Consumer 函数替换重复的添加字段逻辑 - 优化循环结构,提高代码可读性和维护性master
parent
41cdc1fdb6
commit
c968dc1d9b
|
@ -6,6 +6,7 @@ import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.BiPredicate;
|
import java.util.function.BiPredicate;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@ -513,6 +514,102 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
|
||||||
for (ProjectOrderInfo info : projectInfos) {
|
for (ProjectOrderInfo info : projectInfos) {
|
||||||
List<String> row = new ArrayList<>();
|
List<String> row = new ArrayList<>();
|
||||||
// 添加基础字段
|
// 添加基础字段
|
||||||
|
addBasicFields(info, row);
|
||||||
|
|
||||||
|
BigDecimal totalPrice = BigDecimal.ZERO;
|
||||||
|
BigDecimal maintenancePrice = BigDecimal.ZERO;
|
||||||
|
|
||||||
|
OrderExcelNumStaticsDto wssDto = new OrderExcelNumStaticsDto(BigDecimal.ZERO, 0L);
|
||||||
|
OrderExcelNumStaticsDto wspDto = new OrderExcelNumStaticsDto(BigDecimal.ZERO, 0L);
|
||||||
|
OrderExcelNumStaticsDto lsDto = new OrderExcelNumStaticsDto(BigDecimal.ZERO, 0L);
|
||||||
|
OrderExcelNumStaticsDto oneStorDto = new OrderExcelNumStaticsDto(BigDecimal.ZERO, 0L);
|
||||||
|
OrderExcelNumStaticsDto nVIDIADto = new OrderExcelNumStaticsDto(BigDecimal.ZERO, 0L);
|
||||||
|
|
||||||
|
List<ProjectProductInfo> maintenanceList = new ArrayList<>();
|
||||||
|
List<ProjectProductInfo> deployList = new ArrayList<>();
|
||||||
|
// 添加软件产品列
|
||||||
|
for (int i = 0; i < maxSoftware; i++) {
|
||||||
|
if (CollUtil.isNotEmpty(info.getSoftwareProjectProductInfoList()) && i < info.getSoftwareProjectProductInfoList().size()) {
|
||||||
|
ProjectProductInfo productInfo = info.getSoftwareProjectProductInfoList().get(i);
|
||||||
|
if (productInfo.getAllPrice() != null) {
|
||||||
|
totalPrice = totalPrice.add(productInfo.getAllPrice());
|
||||||
|
}
|
||||||
|
staticsNum(wssDto, productInfo, WSS_LIST);
|
||||||
|
staticsNum(wspDto, productInfo, WSP_LIST);
|
||||||
|
staticsNum(lsDto, productInfo, LS_LIST);
|
||||||
|
staticsNum(oneStorDto, productInfo, ONE_STOR_LIST);
|
||||||
|
staticsNum(nVIDIADto, productInfo, N_VIDIA_LIST);
|
||||||
|
} else {
|
||||||
|
// addProductRow(null, row, totalPrice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加终端产品列
|
||||||
|
totalPrice = processProducts(info.getHardwareProjectProductInfoList(), maxHardware, row, totalPrice);
|
||||||
|
|
||||||
|
int serviceIndex=maxMaintenance;
|
||||||
|
// 添加服务产品列
|
||||||
|
for (int maxMaintenanceIndex = 0; serviceIndex >0 ; maxMaintenanceIndex++) {
|
||||||
|
if (CollUtil.isNotEmpty(info.getMaintenanceProjectProductInfoList()) && maxMaintenanceIndex < info.getMaintenanceProjectProductInfoList().size()) {
|
||||||
|
ProjectProductInfo productInfo = info.getMaintenanceProjectProductInfoList().get(maxMaintenanceIndex);
|
||||||
|
|
||||||
|
if (productInfo != null && StringUtils.isNotEmpty(productInfo.getProductBomCode())
|
||||||
|
&& MAINTENANCE_SERVICES.contains(productInfo.getProductBomCode())
|
||||||
|
) {
|
||||||
|
maintenanceList.add(productInfo);
|
||||||
|
maintenancePrice = maintenancePrice.add(productInfo.getAllPrice());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (productInfo != null && StringUtils.isNotEmpty(productInfo.getProductBomCode())
|
||||||
|
&& DEPLOY_SERVICES.contains(productInfo.getProductBomCode())
|
||||||
|
) {
|
||||||
|
deployList.add(productInfo);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
totalPrice = addProductRow(productInfo, row, totalPrice);
|
||||||
|
serviceIndex--;
|
||||||
|
} else {
|
||||||
|
addProductRow(null, row, totalPrice);
|
||||||
|
serviceIndex--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//添加部署
|
||||||
|
totalPrice = processProducts(deployList, maxDeployService, row, totalPrice);
|
||||||
|
//添加维保
|
||||||
|
totalPrice = processProducts(maintenanceList, maxMaintenanceService, row, totalPrice);
|
||||||
|
row.add(8, wssDto.getQuantity().toString());
|
||||||
|
row.add(9, wssDto.getAllPrice().toString());
|
||||||
|
row.add(10, wspDto.getQuantity().toString());
|
||||||
|
row.add(11, wspDto.getAllPrice().toString());
|
||||||
|
row.add(12, lsDto.getQuantity().toString());
|
||||||
|
row.add(13, lsDto.getAllPrice().toString());
|
||||||
|
row.add(14, oneStorDto.getQuantity().toString());
|
||||||
|
row.add(15, oneStorDto.getAllPrice().toString());
|
||||||
|
row.add(16, nVIDIADto.getQuantity().toString());
|
||||||
|
row.add(17, nVIDIADto.getAllPrice().toString());
|
||||||
|
row.add(info.getShipmentAmount() != null ? info.getShipmentAmount().toString() : "");
|
||||||
|
row.add(totalPrice.toString());
|
||||||
|
//维保金额
|
||||||
|
row.add(maintenancePrice.toString());
|
||||||
|
dataList.add(row);
|
||||||
|
}
|
||||||
|
return dataList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private BigDecimal processProducts(List<ProjectProductInfo> products, int maxCount, List<String> row, BigDecimal currentTotal) {
|
||||||
|
for (int i = 0; i < maxCount; i++) {
|
||||||
|
if (CollUtil.isNotEmpty(products) && i < products.size()) {
|
||||||
|
ProjectProductInfo product = products.get(i);
|
||||||
|
currentTotal = addProductRow(product, row, currentTotal);
|
||||||
|
} else {
|
||||||
|
addProductRow(null, row, currentTotal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return currentTotal;
|
||||||
|
}
|
||||||
|
private void addBasicFields(ProjectOrderInfo info, List<String> row) {
|
||||||
row.add(info.getProjectCode());
|
row.add(info.getProjectCode());
|
||||||
row.add(DateUtil.format(info.getEstimatedOrderTime(), "yyyy-MM-dd"));
|
row.add(DateUtil.format(info.getEstimatedOrderTime(), "yyyy-MM-dd"));
|
||||||
row.add(info.getOrderCode());
|
row.add(info.getOrderCode());
|
||||||
|
@ -550,112 +647,6 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
|
||||||
row.add(info.getPartnerPhone());
|
row.add(info.getPartnerPhone());
|
||||||
// row.add(info.getRemark());
|
// row.add(info.getRemark());
|
||||||
// row.add(DictUtils.getDictLabel("order_status", info.getOrderStatus()));
|
// row.add(DictUtils.getDictLabel("order_status", info.getOrderStatus()));
|
||||||
|
|
||||||
BigDecimal totalPrice = BigDecimal.ZERO;
|
|
||||||
BigDecimal maintenancePrice = BigDecimal.ZERO;
|
|
||||||
|
|
||||||
OrderExcelNumStaticsDto wssDto = new OrderExcelNumStaticsDto(BigDecimal.ZERO, 0L);
|
|
||||||
OrderExcelNumStaticsDto wspDto = new OrderExcelNumStaticsDto(BigDecimal.ZERO, 0L);
|
|
||||||
OrderExcelNumStaticsDto lsDto = new OrderExcelNumStaticsDto(BigDecimal.ZERO, 0L);
|
|
||||||
OrderExcelNumStaticsDto oneStorDto = new OrderExcelNumStaticsDto(BigDecimal.ZERO, 0L);
|
|
||||||
OrderExcelNumStaticsDto nVIDIADto = new OrderExcelNumStaticsDto(BigDecimal.ZERO, 0L);
|
|
||||||
|
|
||||||
List<ProjectProductInfo> maintenanceList = new ArrayList<>();
|
|
||||||
List<ProjectProductInfo> deployList = new ArrayList<>();
|
|
||||||
// 添加软件产品列
|
|
||||||
for (int i = 0; i < maxSoftware; i++) {
|
|
||||||
if (CollUtil.isNotEmpty(info.getSoftwareProjectProductInfoList()) && i < info.getSoftwareProjectProductInfoList().size()) {
|
|
||||||
ProjectProductInfo productInfo = info.getSoftwareProjectProductInfoList().get(i);
|
|
||||||
if (productInfo.getAllPrice() != null) {
|
|
||||||
totalPrice = totalPrice.add(productInfo.getAllPrice());
|
|
||||||
}
|
|
||||||
staticsNum(wssDto, productInfo, WSS_LIST);
|
|
||||||
staticsNum(wspDto, productInfo, WSP_LIST);
|
|
||||||
staticsNum(lsDto, productInfo, LS_LIST);
|
|
||||||
staticsNum(oneStorDto, productInfo, ONE_STOR_LIST);
|
|
||||||
staticsNum(nVIDIADto, productInfo, N_VIDIA_LIST);
|
|
||||||
} else {
|
|
||||||
// addProductRow(null, row, totalPrice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 添加终端产品列
|
|
||||||
for (int i = 0; i < maxHardware; i++) {
|
|
||||||
if (CollUtil.isNotEmpty(info.getHardwareProjectProductInfoList()) && i < info.getHardwareProjectProductInfoList().size()) {
|
|
||||||
ProjectProductInfo productInfo = info.getHardwareProjectProductInfoList().get(i);
|
|
||||||
totalPrice = addProductRow(productInfo, row, totalPrice);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
addProductRow(null, row, totalPrice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int serviceIndex=maxMaintenance;
|
|
||||||
// 添加服务产品列
|
|
||||||
int maxMaintenanceIndex=-1;
|
|
||||||
while(serviceIndex>0){
|
|
||||||
maxMaintenanceIndex++;
|
|
||||||
if (CollUtil.isNotEmpty(info.getMaintenanceProjectProductInfoList()) && maxMaintenanceIndex < info.getMaintenanceProjectProductInfoList().size()) {
|
|
||||||
ProjectProductInfo productInfo = info.getMaintenanceProjectProductInfoList().get(maxMaintenanceIndex);
|
|
||||||
|
|
||||||
if (productInfo != null && StringUtils.isNotEmpty(productInfo.getProductBomCode())
|
|
||||||
&& MAINTENANCE_SERVICES.contains(productInfo.getProductBomCode())
|
|
||||||
) {
|
|
||||||
maintenanceList.add(productInfo);
|
|
||||||
maintenancePrice = maintenancePrice.add(productInfo.getAllPrice());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (productInfo != null && StringUtils.isNotEmpty(productInfo.getProductBomCode())
|
|
||||||
&& DEPLOY_SERVICES.contains(productInfo.getProductBomCode())
|
|
||||||
) {
|
|
||||||
deployList.add(productInfo);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
totalPrice = addProductRow(productInfo, row, totalPrice);
|
|
||||||
serviceIndex--;
|
|
||||||
} else {
|
|
||||||
addProductRow(null, row, totalPrice);
|
|
||||||
serviceIndex--;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//添加部署
|
|
||||||
for (int i = 0; i < maxDeployService; i++) {
|
|
||||||
if (CollUtil.isNotEmpty(deployList) && i < deployList.size()) {
|
|
||||||
ProjectProductInfo productInfo = deployList.get(i);
|
|
||||||
totalPrice = addProductRow(productInfo, row, totalPrice);
|
|
||||||
} else {
|
|
||||||
addProductRow(null, row, totalPrice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//添加维保
|
|
||||||
for (int i = 0; i < maxMaintenanceService; i++) {
|
|
||||||
if (CollUtil.isNotEmpty(maintenanceList) && i < maintenanceList.size()) {
|
|
||||||
ProjectProductInfo productInfo = maintenanceList.get(i);
|
|
||||||
totalPrice = addProductRow(productInfo, row, totalPrice);
|
|
||||||
} else {
|
|
||||||
addProductRow(null, row, totalPrice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
row.add(8, wssDto.getQuantity().toString());
|
|
||||||
row.add(9, wssDto.getAllPrice().toString());
|
|
||||||
row.add(10, wspDto.getQuantity().toString());
|
|
||||||
row.add(11, wspDto.getAllPrice().toString());
|
|
||||||
row.add(12, lsDto.getQuantity().toString());
|
|
||||||
row.add(13, lsDto.getAllPrice().toString());
|
|
||||||
row.add(14, oneStorDto.getQuantity().toString());
|
|
||||||
row.add(15, oneStorDto.getAllPrice().toString());
|
|
||||||
row.add(16, nVIDIADto.getQuantity().toString());
|
|
||||||
row.add(17, nVIDIADto.getAllPrice().toString());
|
|
||||||
row.add(info.getShipmentAmount() != null ? info.getShipmentAmount().toString() : "");
|
|
||||||
row.add(totalPrice.toString());
|
|
||||||
//维保金额
|
|
||||||
row.add(maintenancePrice.toString());
|
|
||||||
dataList.add(row);
|
|
||||||
}
|
|
||||||
return dataList;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue