From 58f6d099d3ba1a0c995efc52ba8558be838322d6 Mon Sep 17 00:00:00 2001 From: 354798ggg <1074825718@qq.com> Date: 星期日, 08 十月 2023 16:32:21 +0800 Subject: [PATCH] 代码优化 --- product-server-project-management/src/main/java/com/product/project/management/service/ProjectBudgetService.java | 199 ++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 152 insertions(+), 47 deletions(-) diff --git a/product-server-project-management/src/main/java/com/product/project/management/service/ProjectBudgetService.java b/product-server-project-management/src/main/java/com/product/project/management/service/ProjectBudgetService.java index 535162e..12fd31d 100644 --- a/product-server-project-management/src/main/java/com/product/project/management/service/ProjectBudgetService.java +++ b/product-server-project-management/src/main/java/com/product/project/management/service/ProjectBudgetService.java @@ -1,7 +1,8 @@ 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; @@ -13,88 +14,192 @@ 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.ItemizeUtil; +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 瑙f瀽鏁版嵁 * @param headerDataList excel鏍囬鏁版嵁 */ - public DataTableEntity importBudget(DataTableEntity dtParseData, List<List<String>> headerDataList) { + public DataTableEntity importBudget2(DataTableEntity dtParseData, List<List<String>> headerDataList) { + //鍒ゆ柇鏄惁鏈夎В鏋怑XCEL鏁版嵁 if (BaseUtil.dataTableIsEmpty(dtParseData)) { return null; } - //澹版槑寮傚父闆� - StringBuilder sbError = new StringBuilder(); + //涓存椂瀛樺偍闆嗗悎 + 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); - //鏍规嵁瑙f瀽鏁版嵁鑾峰彇椤圭洰鍒嗛」淇℃伅 - 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; + //鐢熸垚鏉愭枡绫诲瀷 + String bugetCode = fseParseData.getString(Cmnconst.BUDGET_CODE); + String materialType = null; + if ("澹版祴绠�".equals(bugetCode)) { + 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; + String materialCode = fseParseData.getString(Cmnconst.MATERIAL_CODE); + if (materialCode.contains("鏋剁珛绛�")) { + materialType = "1"; + fseParseData.setValue(Cmnconst.MATERIAL_CODE, ItemizeUtil.getChineseOrEnglishOrNumber("ENGLISHNUMBER", materialCode)); + }else if (materialCode.contains("閽㈢瓔缃�")) { + materialType = "3"; + fseParseData.setValue(Cmnconst.MATERIAL_CODE, ItemizeUtil.getChineseOrEnglishOrNumber("ENGLISHNUMBER", materialCode)); + }else{ + FieldSetEntity fseMaterial = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_BASE_MATERIAL,"material_code=?", new Object[] {materialCode}, false); + if (fseMaterial != null) { + materialType = fseMaterial.getString(Cmnconst.MATERIAL_TYPE); + if (materialType.indexOf("0")>-1) { + materialType = "0"; + } + } } } fseParseData.setValue(Cmnconst.MATERIAL_TYPE, materialType); } - //鍒ゆ柇鏄惁鍖呭惈閿欒淇℃伅 - if (!BaseUtil.strIsNull(sbError.toString())) { - throw new BaseException(SystemCode.PROJECT_BUDGET_IMPORT_FAIL.getValue(), sbError.toString()); + if (!BaseUtil.dataTableIsEmpty(dtNewProjectItem)) { + try { + baseDao.add(dtNewProjectItem); + } catch (Exception e) { + e.printStackTrace(); + } } return dtParseData; } /** - * 鑷姩鐢熸垚鏌ヨ椤圭洰鍒嗛」filter - * @param params + * 閫氳繃field1,field2,field3,field4,field5,field6鏁版嵁鑷姩鐢熸垚椤圭洰鍒嗛」鏁版嵁 + * 濡傛灉椤圭洰鍒嗛」宸插瓨鍦ㄦ暟鎹簱鎴栬�呮柊鐢熸垚锛屽皢瀛樺叆map闆嗗悎涓互渚夸娇鐢� + * 濡傛灉椤圭洰鍒嗛」涓嶅瓨鍦ㄤ簬鏁版嵁搴撳垯鐢熸垚椤圭洰鍒嗛」鏁版嵁 + * @param dtNewProjectItem * @param fseParseData + * @param itemizeFullNameAndUUID + * @param itemizeFullNameAndCode + * @param itemizeFullNameAndMaxCode * @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("/"); + 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; + FieldSetEntity fseProject = baseDao.getFieldSetByFilter(Cmnconst.PRODUCT_PROJECT_QXLW, "project_name=?", new Object[] {fseParseData.getString("field0")}, false); + String projectUUID = fseProject.getUUID(); + //寰幆field1~field6瀛楁锛岄�愭鐢熸垚瀵瑰簲鐨勯」鐩垎椤规暟鎹� + for (int i = 1; i < 9; i++) { + + //鑾峰彇鍒嗛」鍚嶇О,鍒ゆ柇鏄惁涓虹┖ + String itemize = fseParseData.getString("field"+i); + //鍒ゆ柇椤圭洰鍒嗛」鍚嶇О鏄惁涓虹┖锛堝涓虹┖锛氬垯璇ラ绠楀搴旂殑椤圭洰鍒嗛」鐢熸垚瀹屾瘯锛岄绠楀叧鑱旂殑UUID涓轰笂涓�涓猣ield鍒嗛」瀵瑰簲鐨刄UID + if (BaseUtil.strIsNull(itemize)) { + if (i==8) { + finalUUID = itemizeFullNameAndUUID.get(itemizFullName); } - if(i==1) { - params.add(fieldValue); - }else{ - projectItem.append(fieldValue); + continue; + } + + //鑾峰彇涓婄骇鍒嗛」鍜屽綋鍓嶅垎椤瑰叏绉帮紙濡傚綋鍓嶅垎椤规病鏈変笂绾э細鍒欏叏绉扮瓑浜庡悕绉帮紱濡傛湁涓婄骇锛氬垯鍏ㄧО绛変簬涓婄骇鍏ㄧО/鍚嶇О锛� + 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, "project_uuid = ? AND itemize_full_name=?", new Object[] {projectUUID,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"}, "project_uuid = ? AND itemize_parent_code IS NULL", new Object[] {projectUUID}, false, null); + }else { + fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "project_uuid = ? AND itemize_parent_code = ?", new Object[] {projectUUID, 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, projectUUID); + 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"}, "project_uuid = ? AND itemize_parent_code IS NULL", new Object[] {projectUUID}, false, null); + }else { + fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, " project_uuid = ? AND itemize_parent_code=?", new Object[] {projectUUID, fseProjectItem.getString(Cmnconst.ITEMIZE_PARENT_CODE)}, false, null); + } + itemizeFullNameAndUUID.put(itemizFullName, uuid); + itemizeFullNameAndCode.put(itemizFullName, code); + itemizeFullNameAndMaxCode.put(itemizeParent, fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE)); } } } - params.add(projectItem.toString()); - return projectItem.toString(); + return finalUUID; + } + + /** + * 娓呴櫎鎵�鏈夐绠� + * @param projectUUID + * @return + */ + public boolean clearBudget(String projectUUID, String itemizeCode) { + //鏌ヨ瀵瑰簲椤圭洰瀵瑰簲鍒嗛」鐨勫嚭搴撴暟鎹� + DataTableEntity dtOutbound; + if(BaseUtil.strIsNull(itemizeCode)) { + dtOutbound = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_OUTBOUND, "project_uuid=?", new Object[] {projectUUID}); + }else { + dtOutbound = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_OUTBOUND, "project_uuid=? AND project_itemize IN (SELECT uuid FROM product_project_item WHERE project_uuid=? AND itemize_code LIKE ?)", new Object[] {projectUUID,projectUUID,itemizeCode+"%"}); + } + //鍒ゅ畾鍑哄簱鏁版嵁鏄惁瀛樺湪 + if (!BaseUtil.dataTableIsEmpty(dtOutbound)) { + throw new BaseException(SystemCode.PROJeCT_BUDGET_CLEAR_FAIL_HAS_OUTBOUND.getValue(), SystemCode.PROJeCT_BUDGET_CLEAR_FAIL_HAS_OUTBOUND.getText()); + } + if (BaseUtil.strIsNull(itemizeCode)) { + return baseDao.executeUpdate("DELETE FROM product_project_budget WHERE project_itemize_uuid IN (SELECT uuid FROM product_project_item WHERE project_uuid=?)", new Object[] {projectUUID}); + }else { + return baseDao.executeUpdate("DELETE FROM product_project_budget WHERE project_itemize_uuid IN (SELECT uuid FROM product_project_item WHERE project_uuid=? AND itemize_code LIKE ?)", new Object[] {projectUUID,itemizeCode+"%"}); + } } } -- Gitblit v1.9.2