From 96b6c0cf5b5a55cb9681ba832ad1278945e5ff78 Mon Sep 17 00:00:00 2001
From: 354798ggg <1074825718@qq.com>
Date: 星期四, 17 八月 2023 14:42:43 +0800
Subject: [PATCH] 按节点生成预算
---
product-server-project-management/src/main/java/com/product/project/management/service/ProjectBudgetService.java | 190 +++++++++++++++++++++++++++++++++++++++-------
1 files changed, 159 insertions(+), 31 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 3bc336b..ee6305f 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,9 @@
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,70 +15,196 @@
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) {
+ try {
+
+
//鍒ゆ柇鏄惁鏈夎В鏋怑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;
+ //鐢熸垚鏉愭枡绫诲瀷
+ String bugetCode = fseParseData.getString(Cmnconst.BUDGET_CODE);
+ String materialType = null;
+ if ("澹版祴绠�".equals(bugetCode)) {
+ materialType = "2";
+ }else {
+ 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("project_itemize_uuid", fseProjectItem.getUUID());
+ 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();
+ }
}
-// baseDao.add(dtParseData);
+ } 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());
+ }
+ return false;
+// 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