package com.product.project.management.service; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.product.core.dao.BaseDao; import com.product.core.entity.DataTableEntity; import com.product.core.entity.FieldSetEntity; import com.product.core.exception.BaseException; import com.product.core.service.support.AbstractBaseService; import com.product.project.management.config.Cmnconst; import com.product.project.management.config.SystemCode; import com.product.util.BaseUtil; @Service("projectBudget") public class ProjectBudgetService extends AbstractBaseService{ @Autowired BaseDao baseDao; /** * 项目预算导入 * @param dtParseData 解析数据 * @param headerDataList excel标题数据 */ public DataTableEntity importBudget(DataTableEntity dtParseData, List> headerDataList) { //判断是否有解析EXCEL数据 if (BaseUtil.dataTableIsEmpty(dtParseData)) { return null; } //声明异常集 StringBuilder sbError = new StringBuilder(); //遍历excel转换数据 for (int i = 0; i < dtParseData.getRows(); i++) { FieldSetEntity fseParseData = dtParseData.getFieldSetEntity(i); //根据解析数据获取项目分项信息 List params = new ArrayList<>(); String projectItem = autoCreateFilter(params, fseParseData); //根据模板项目分项查询数据库项目分项 FieldSetEntity fseProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid IN (SELECT uuid FROM product_project_qxlw WHERE project_name=?) AND itemize_full_name=?", params.toArray(), false); if(fseProjectItem==null) { sbError.append(String.format("第 %s 行项目分项 '%s' 不存在于系统中。", fseParseData.getString("~row~"), projectItem)); continue; } //设置关联项目分项 fseParseData.setValue("project_itemize_uuid", fseProjectItem.getUUID()); //获取编码生成材料类型 String budgetCode = fseParseData.getString(Cmnconst.BUDGET_CODE); Integer materialType = 0; if("架立筋".equals(budgetCode)) { materialType = 1; }else if("声测管".equals(budgetCode)) { materialType = 2; }else { //网片 FieldSetEntity materialInfo = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_BASE_MATERIAL, "material_type=3 AND material_name like ?", new Object[] {fseParseData.getString(Cmnconst.MATERIAL_CODE)+"%"}, false); if (materialInfo!=null) { materialType = 3; } } fseParseData.setValue(Cmnconst.MATERIAL_TYPE, materialType); } //判断是否包含错误信息 if (!BaseUtil.strIsNull(sbError.toString())) { throw new BaseException(SystemCode.PROJECT_BUDGET_IMPORT_FAIL.getValue(), sbError.toString()); } return dtParseData; } /** * 自动生成查询项目分项filter * @param params * @param fseParseData * @return */ public String autoCreateFilter(List params , FieldSetEntity fseParseData) { StringBuilder projectItem = new StringBuilder(); for (int i = 1; i < 7; i++) { String fieldValue = fseParseData.getString("field"+i); if(!BaseUtil.strIsNull(fieldValue)) { if (i>2) { projectItem.append("/"); } if(i==1) { params.add(fieldValue); }else{ projectItem.append(fieldValue); } } } params.add(projectItem.toString()); return projectItem.toString(); } }