| | |
| | | package com.product.project.management.service; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import com.product.core.service.support.AbstractBaseService; |
| | | import com.product.project.management.config.Cmnconst; |
| | | import com.product.project.management.config.SystemCode; |
| | | import com.product.project.management.util.ProjectItemUtil; |
| | | import com.product.util.BaseUtil; |
| | | |
| | | import cn.hutool.core.lang.UUID; |
| | | |
| | | @Service("projectBudget") |
| | | public class ProjectBudgetService extends AbstractBaseService{ |
| | | |
| | | @Autowired |
| | | BaseDao baseDao; |
| | | |
| | | /** |
| | | * 项目预算导入 |
| | | * @param dtParseData 解析数据 |
| | | * @param headerDataList excel标题数据 |
| | | */ |
| | | public DataTableEntity importBudget2(DataTableEntity dtParseData, List<List<String>> headerDataList) { |
| | | //判断是否有解析EXCEL数据 |
| | | if (BaseUtil.dataTableIsEmpty(dtParseData)) { |
| | | return null; |
| | | } |
| | | //临时存储集合 |
| | | Map<String, String> itemizeFullNameAndUUID = new HashMap<>(); |
| | | Map<String, String> itemizeFullNameAndCode = new HashMap<>(); |
| | | Map<String, String> itemizeFullNameAndMaxCode = new HashMap<>(); |
| | | DataTableEntity dtNewProjectItem = new DataTableEntity(); |
| | | |
| | | //遍历excel转换数据 |
| | | for (int i = 0; i < dtParseData.getRows(); i++) { |
| | | //获取excel行数据 |
| | | FieldSetEntity fseParseData = dtParseData.getFieldSetEntity(i); |
| | | String uuid = autoCreateProjectItem(dtNewProjectItem, fseParseData, itemizeFullNameAndUUID, itemizeFullNameAndCode, itemizeFullNameAndMaxCode); |
| | | fseParseData.setValue(Cmnconst.PROJECT_ITEMIZE_UUID, uuid); |
| | | } |
| | | if (!BaseUtil.dataTableIsEmpty(dtNewProjectItem)) { |
| | | try { |
| | | baseDao.add(dtNewProjectItem); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | return dtParseData; |
| | | } |
| | | |
| | | /** |
| | | * 通过field1,field2,field3,field4,field5,field6数据自动生成项目分项数据 |
| | | * 如果项目分项已存在数据库或者新生成,将存入map集合中以便使用 |
| | | * 如果项目分项不存在于数据库则生成项目分项数据 |
| | | * @param dtNewProjectItem |
| | | * @param fseParseData |
| | | * @param itemizeFullNameAndUUID |
| | | * @param itemizeFullNameAndCode |
| | | * @param itemizeFullNameAndMaxCode |
| | | * @return |
| | | */ |
| | | public String autoCreateProjectItem(DataTableEntity dtNewProjectItem, FieldSetEntity fseParseData, Map<String, String> itemizeFullNameAndUUID, Map<String, String> itemizeFullNameAndCode, Map<String, String> itemizeFullNameAndMaxCode) { |
| | | String itemizFullName = null; |
| | | String finalUUID = null; |
| | | //循环field1~field6字段,逐步生成对应的项目分项数据 |
| | | for (int i = 1; i < 7; i++) { |
| | | |
| | | //获取分项名称,判断是否为空 |
| | | String itemize = fseParseData.getString("field"+i); |
| | | //判断项目分项名称是否为空(如为空:则该预算对应的项目分项生成完毕,预算关联的UUID为上一个field分项对应的UUID |
| | | if (BaseUtil.strIsNull(itemize)) { |
| | | finalUUID = itemizeFullNameAndUUID.get(itemizFullName); |
| | | break; |
| | | } |
| | | |
| | | //获取上级分项和当前分项全称(如当前分项没有上级:则全称等于名称;如有上级:则全称等于上级全称/名称) |
| | | String itemizeParent = null; |
| | | //获取分项全称 |
| | | if (BaseUtil.strIsNull(itemizFullName)) { |
| | | itemizFullName = itemize; |
| | | }else { |
| | | itemizeParent = itemizFullName; |
| | | itemizFullName = itemizFullName + "/" + itemize; |
| | | } |
| | | |
| | | //判断项目分项是否存在于集合中 |
| | | if(!itemizeFullNameAndCode.containsKey(itemizFullName)) { |
| | | //查询分项和上级分项是否存在于数据库中 |
| | | FieldSetEntity fseProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, "itemize_full_name=?", new Object[] {itemizFullName}, false); |
| | | if (fseProjectItem == null) { |
| | | String uuid = UUID.randomUUID().toString(); |
| | | String code; |
| | | |
| | | if (!BaseUtil.strIsNull(itemizeFullNameAndMaxCode.get(itemizeParent))) { |
| | | code = ProjectItemUtil.autoAddOneCode(itemizeFullNameAndMaxCode.get(itemizeParent)); |
| | | }else { |
| | | FieldSetEntity fseMaxProjectItem; |
| | | if(BaseUtil.strIsNull(itemizeParent)) { |
| | | fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "itemize_parent_code IS NULL", new Object[] {}, false, null); |
| | | }else { |
| | | fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "itemize_parent_code = ?", new Object[] {itemizeFullNameAndCode.get(itemizeParent)}, false, null); |
| | | } |
| | | if (fseMaxProjectItem==null || BaseUtil.strIsNull(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE))) { |
| | | code = ProjectItemUtil.autoCreateCode(itemizeFullNameAndCode.get(itemizeParent)); |
| | | }else { |
| | | code = ProjectItemUtil.autoAddOneCode(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE)); |
| | | } |
| | | } |
| | | FieldSetEntity fseNewProject = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_ITEM); |
| | | fseNewProject.setValue(Cmnconst.UUID, uuid); |
| | | fseNewProject.setValue("~type~", "add"); |
| | | // fseNewProject.setValue(Cmnconst.PROJECT_UUID, ); |
| | | fseNewProject.setValue(Cmnconst.ITEMIZE, itemize); |
| | | fseNewProject.setValue(Cmnconst.ITEMIZE_CODE, code); |
| | | fseNewProject.setValue(Cmnconst.ITEMIZE_PARENT_CODE, itemizeFullNameAndCode.get(itemizeParent)); |
| | | fseNewProject.setValue(Cmnconst.ITEMIZE_FULL_NAME, itemizFullName); |
| | | dtNewProjectItem.addFieldSetEntity(fseNewProject); |
| | | |
| | | itemizeFullNameAndUUID.put(itemizFullName, uuid); |
| | | itemizeFullNameAndCode.put(itemizFullName, code); |
| | | itemizeFullNameAndMaxCode.put(itemizeParent, code); |
| | | }else { |
| | | String uuid = fseProjectItem.getUUID(); |
| | | String code = fseProjectItem.getString(Cmnconst.ITEMIZE_CODE); |
| | | FieldSetEntity fseMaxProjectItem; |
| | | if (BaseUtil.strIsNull(fseProjectItem.getString(Cmnconst.ITEMIZE_PARENT_CODE))) { |
| | | fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "itemize_parent_code IS NULL", new Object[] {}, false, null); |
| | | }else { |
| | | fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "itemize_parent_code=?", new Object[] {fseProjectItem.getString(Cmnconst.ITEMIZE_PARENT_CODE)}, false, null); |
| | | } |
| | | itemizeFullNameAndUUID.put(itemizFullName, uuid); |
| | | itemizeFullNameAndCode.put(itemizFullName, code); |
| | | itemizeFullNameAndMaxCode.put(itemizeParent, fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE)); |
| | | } |
| | | } |
| | | } |
| | | return finalUUID; |
| | | } |
| | | |
| | | /** |
| | | * 项目预算导入 |