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()); } if (!BaseUtil.strIsNull(sbError.toString())) { throw new BaseException(SystemCode.PROJECT_BUDGET_IMPORT_FAIL.getValue(), sbError.toString()); } // baseDao.add(dtParseData); 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(); } }