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<List<String>> 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<Object> 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<Object> 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();
|
}
|
}
|