refactor(sip): 重构项目订单信息导出功能

- 提取公共方法 addBasicFields 和 processProducts 以简化代码结构
- 使用 Consumer 函数替换重复的添加字段逻辑
- 优化循环结构,提高代码可读性和维护性
master
chenhao 2025-06-26 10:52:33 +08:00
parent 41cdc1fdb6
commit c968dc1d9b
1 changed files with 58 additions and 67 deletions

View File

@ -6,6 +6,7 @@ import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -513,43 +514,7 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
for (ProjectOrderInfo info : projectInfos) {
List<String> row = new ArrayList<>();
// 添加基础字段
row.add(info.getProjectCode());
row.add(DateUtil.format(info.getEstimatedOrderTime(), "yyyy-MM-dd"));
row.add(info.getOrderCode());
row.add(info.getProjectName());
row.add(StringUtils.isEmpty(info.getOrderChannel()) ? "" :
"1".equals(info.getOrderChannel()) ? "总代" : "直签");
row.add(info.getDutyName());
row.add(info.getAgentName());
row.add(info.getCustomerName());
row.add(DictUtils.getDictLabel("bg_type", info.getBgProperty()));
row.add(info.getIndustryType());
row.add(info.getBusinessPerson());
// row.add(info.getBusinessEmail());
row.add(info.getBusinessPhone());
row.add(DictUtils.getDictLabel("currency_type", info.getCurrencyType()));
// row.add(DateUtil.format(info.getOrderEndTime(), "yyyy-MM-dd"));
// row.add(DateUtil.format(info.getDeliveryTime(), "yyyy-MM-dd"));
// row.add(DictUtils.getDictLabel("company_delivery", info.getCompanyDelivery()));
// row.add(info.getSupplier());
// row.add(info.getDutyEmail());
// row.add(info.getDutyPhone());
row.add(info.getPartnerName());
// row.add(info.getPartnerCode());
row.add(DictUtils.getDictLabel("identify_level", info.getLevel()));
row.add(info.getPartnerUserName());
// row.add(info.getPartnerEmail());
row.add(info.getPartnerPhone());
// row.add(info.getRemark());
// row.add(DictUtils.getDictLabel("order_status", info.getOrderStatus()));
addBasicFields(info, row);
BigDecimal totalPrice = BigDecimal.ZERO;
BigDecimal maintenancePrice = BigDecimal.ZERO;
@ -580,20 +545,11 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
}
// 添加终端产品列
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);
totalPrice = processProducts(info.getHardwareProjectProductInfoList(), maxHardware, row, totalPrice);
} else {
addProductRow(null, row, totalPrice);
}
}
int serviceIndex=maxMaintenance;
// 添加服务产品列
int maxMaintenanceIndex=-1;
while(serviceIndex>0){
maxMaintenanceIndex++;
for (int maxMaintenanceIndex = 0; serviceIndex >0 ; maxMaintenanceIndex++) {
if (CollUtil.isNotEmpty(info.getMaintenanceProjectProductInfoList()) && maxMaintenanceIndex < info.getMaintenanceProjectProductInfoList().size()) {
ProjectProductInfo productInfo = info.getMaintenanceProjectProductInfoList().get(maxMaintenanceIndex);
@ -616,29 +572,12 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
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);
}
}
totalPrice = processProducts(deployList, maxDeployService, 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);
}
}
totalPrice = processProducts(maintenanceList, maxMaintenanceService, row, totalPrice);
row.add(8, wssDto.getQuantity().toString());
row.add(9, wssDto.getAllPrice().toString());
row.add(10, wspDto.getQuantity().toString());
@ -659,6 +598,58 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
}
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(DateUtil.format(info.getEstimatedOrderTime(), "yyyy-MM-dd"));
row.add(info.getOrderCode());
row.add(info.getProjectName());
row.add(StringUtils.isEmpty(info.getOrderChannel()) ? "" :
"1".equals(info.getOrderChannel()) ? "总代" : "直签");
row.add(info.getDutyName());
row.add(info.getAgentName());
row.add(info.getCustomerName());
row.add(DictUtils.getDictLabel("bg_type", info.getBgProperty()));
row.add(info.getIndustryType());
row.add(info.getBusinessPerson());
// row.add(info.getBusinessEmail());
row.add(info.getBusinessPhone());
row.add(DictUtils.getDictLabel("currency_type", info.getCurrencyType()));
// row.add(DateUtil.format(info.getOrderEndTime(), "yyyy-MM-dd"));
// row.add(DateUtil.format(info.getDeliveryTime(), "yyyy-MM-dd"));
// row.add(DictUtils.getDictLabel("company_delivery", info.getCompanyDelivery()));
// row.add(info.getSupplier());
// row.add(info.getDutyEmail());
// row.add(info.getDutyPhone());
row.add(info.getPartnerName());
// row.add(info.getPartnerCode());
row.add(DictUtils.getDictLabel("identify_level", info.getLevel()));
row.add(info.getPartnerUserName());
// row.add(info.getPartnerEmail());
row.add(info.getPartnerPhone());
// row.add(info.getRemark());
// row.add(DictUtils.getDictLabel("order_status", info.getOrderStatus()));
}
private void staticsNum(OrderExcelNumStaticsDto dto, ProjectProductInfo info, List<String> parentList) {
if (dto == null || parentList == null) {
return;