From e31fe4140580a730dcb2f2aecb6ac0d7a66df7c0 Mon Sep 17 00:00:00 2001
From: 354798ggg <1074825718@qq.com>
Date: 星期五, 21 七月 2023 09:25:35 +0800
Subject: [PATCH] 系统变更

---
 product-server-project-management/src/main/java/com/product/project/management/service/ProjectBudgetService.java        |  127 ++++++++++++++
 product-server-project-management/src/main/java/com/product/project/management/service/ProjectItemizeService.java       |  142 +++++++++++++++
 product-server-project-management/src/main/java/com/product/project/management/config/SystemCode.java                   |    6 
 product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java    |   40 ++--
 product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java          |    3 
 product-server-project-management/src/main/java/com/product/project/management/controller/ProjectItemizeController.java |  148 ++++++++++++++++
 product-server-project-management/src/main/java/com/product/project/management/config/Cmnconst.java                     |    2 
 product-server-project-management/src/main/java/com/product/project/management/util/ProjectItemUtil.java                |   51 +++++
 8 files changed, 495 insertions(+), 24 deletions(-)

diff --git a/product-server-project-management/src/main/java/com/product/project/management/config/Cmnconst.java b/product-server-project-management/src/main/java/com/product/project/management/config/Cmnconst.java
index 3b53275..60cf7f7 100644
--- a/product-server-project-management/src/main/java/com/product/project/management/config/Cmnconst.java
+++ b/product-server-project-management/src/main/java/com/product/project/management/config/Cmnconst.java
@@ -17,10 +17,12 @@
 	public static final String TOTAL_OUTBOUND_WEIGHT="total_outbound_weight";
 	public static final String PROJECT_NAME="project_name";
 	public static final String PROJECT_ITEMIZE="project_itemize";
+	public static final String PROJECT_ITEMIZE_UUID="project_itemize_uuid";
 	public static final String ITEMIZE="itemize";
 	public static final String ITEMIZE_CODE="itemize_code";
 	public static final String ITEMIZE_TYPE="itemize_type";
 	public static final String ITEMIZE_PARENT_CODE="itemize_parent_code";
+	public static final String ITEMIZE_FULL_NAME="itemize_full_name";
 	public static final String BUDGET_CODE="budget_code";
 
 
diff --git a/product-server-project-management/src/main/java/com/product/project/management/config/SystemCode.java b/product-server-project-management/src/main/java/com/product/project/management/config/SystemCode.java
index 266a7ef..0c9813b 100644
--- a/product-server-project-management/src/main/java/com/product/project/management/config/SystemCode.java
+++ b/product-server-project-management/src/main/java/com/product/project/management/config/SystemCode.java
@@ -10,8 +10,10 @@
     SYSTEM_ACQUIRE_PARAM_FAIL("鑾峰彇鍙傛暟澶辫触", ModuleEnum.SYSTEM.getValue() + "996"),
     SYSTEM_CPAGES_NOT_NULL("鍒嗛〉鍙傛暟涓嶈兘涓虹┖", ModuleEnum.SYSTEM.getValue() + "995"),
     
-    PROJECT_MANAGEMENT_ITEMIZE_DEL_FAIL("椤圭洰鍒嗛」鍒犻櫎澶辫触锛屽凡缁忕敓鎴愰绠�",""),
-    PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR("椤圭洰鍒嗛」鎿嶄綔閿欒锛�",""),
+    PROJECT_INFO_OPERATE_ERROR("椤圭洰淇℃伅鎿嶄綔澶辫触:", ""),
+    PROJECT_ITEMIZE_OPERATE_ERROR("椤圭洰鍒嗛」鎿嶄綔閿欒锛�",""),
+    PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET("椤圭洰鍒嗛」鍒犻櫎澶辫触锛屽凡缁忕敓鎴愰绠�",""),
+    PROJECT_ITEMIZE_DEL_FAIL("椤圭洰鍒嗛」鍒犻櫎澶辫触",""),
     PROJECT_BUDGET_IMPORT_FAIL("椤圭洰棰勭畻瀵煎叆澶辫触",""),
 	;
 
diff --git a/product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java b/product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java
index 4bf7bab..b094be6 100644
--- a/product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java
+++ b/product-server-project-management/src/main/java/com/product/project/management/controller/ProjectInfoController.java
@@ -48,8 +48,8 @@
             return this.error(e);
         } catch (Exception e) {
             e.printStackTrace();
-            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
-                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
+            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
         }
     }
 
@@ -76,8 +76,8 @@
             return this.error(e);
         } catch (Exception e) {
             e.printStackTrace();
-            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
-                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
+            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
         }
     }
 
@@ -104,8 +104,8 @@
             return this.error(e);
         } catch (Exception e) {
             e.printStackTrace();
-            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
-                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
+            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
         }
     }
 
@@ -125,8 +125,8 @@
             return this.error(e);
         } catch (Exception e) {
             e.printStackTrace();
-            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
-                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
+            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
         }
     }
 
@@ -154,8 +154,8 @@
             return this.error(e);
         } catch (Exception e) {
             e.printStackTrace();
-            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
-                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
+            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
         }
     }
 
@@ -183,8 +183,8 @@
             return this.error(e);
         } catch (Exception e) {
             e.printStackTrace();
-            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
-                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
+            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
         }
     }
 
@@ -216,8 +216,8 @@
             return this.error(e);
         } catch (Exception e) {
             e.printStackTrace();
-            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
-                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
+            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
         }
     }
 
@@ -249,8 +249,8 @@
             return this.error(e);
         } catch (Exception e) {
             e.printStackTrace();
-            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
-                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
+            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
         }
     }
 
@@ -276,8 +276,8 @@
             return this.error(e);
         } catch (Exception e) {
             e.printStackTrace();
-            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
-                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
+            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
         }
     }
 
@@ -304,8 +304,8 @@
             return this.error(e);
         } catch (Exception e) {
             e.printStackTrace();
-            return this.error(SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getValue(),
-                    SystemCode.PROJECT_MAMAGERENT_ITEMIZE_GENERAL_ERROR.getText() + e.getMessage());
+            return this.error(SystemCode.PROJECT_INFO_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_INFO_OPERATE_ERROR.getText() + e.getMessage());
         }
     }
 
diff --git a/product-server-project-management/src/main/java/com/product/project/management/controller/ProjectItemizeController.java b/product-server-project-management/src/main/java/com/product/project/management/controller/ProjectItemizeController.java
new file mode 100644
index 0000000..767c4c2
--- /dev/null
+++ b/product-server-project-management/src/main/java/com/product/project/management/controller/ProjectItemizeController.java
@@ -0,0 +1,148 @@
+package com.product.project.management.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.product.core.config.CoreConst;
+import com.product.core.controller.support.AbstractBaseController;
+import com.product.core.entity.FieldSetEntity;
+import com.product.core.exception.BaseException;
+import com.product.module.sys.version.ApiVersion;
+import com.product.project.management.config.Cmnconst;
+import com.product.project.management.config.SystemCode;
+import com.product.project.management.service.ProjectItemizeService;
+import com.product.util.BaseUtil;
+
+/**
+ * 	椤圭洰鍒嗛儴鍒嗛」
+ * @author 86151
+ *
+ */
+@RequestMapping("/api/project-itemize")
+@RestController
+public class ProjectItemizeController extends AbstractBaseController{
+
+	@Autowired
+	ProjectItemizeService projectItemizeService;
+
+    /**
+     * 	椤圭洰鍒嗛」-椤圭洰鏍戯紙涓诲瓙椤圭洰锛�
+     *
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "/project-tree/{version}", method = RequestMethod.POST)
+    @ApiVersion(1)
+    public String getProjectTree(HttpServletRequest request) {
+        try {
+            // 鑾峰彇鍙傛暟
+            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
+
+            // 鍒ゆ柇uuid鏄惁涓虹┖
+            if (BaseUtil.strIsNull(fse.getString(Cmnconst.PROJECT_UUID))) {
+                return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
+            }
+            return OK_List(projectItemizeService.getProjectTree(fse.getString(Cmnconst.PROJECT_UUID)));
+        } catch (BaseException e) {
+            e.printStackTrace();
+            return this.error(e);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return this.error(SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getText() + e.getMessage());
+        }
+    }
+    
+    /**
+     * 	椤圭洰鍒嗛」-鍒嗛」鍒楄〃
+     *
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "/list/{version}", method = RequestMethod.POST)
+    @ApiVersion(1)
+    public String listProjectItem(HttpServletRequest request) {
+        try {
+            // 鑾峰彇鍙傛暟
+            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
+
+            //鍒ゆ柇uuid鏄惁涓虹┖
+            if (BaseUtil.strIsNull(fse.getString(Cmnconst.PROJECT_UUID))) {
+                return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
+            }
+
+            //鍒ゆ柇鍒嗛〉鍙傛暟鏄惁涓虹┖
+            if (BaseUtil.strIsNull(fse.getString(CoreConst.CPAGE)) || BaseUtil.strIsNull(fse.getString(CoreConst.PAGESIZE))) {
+                return this.error(SystemCode.SYSTEM_CPAGES_NOT_NULL.getValue(), SystemCode.SYSTEM_CPAGES_NOT_NULL.getText());
+            }
+            return OK_List(projectItemizeService.listProjectItem(fse.getString(Cmnconst.PROJECT_UUID),fse.getString(Cmnconst.ITEMIZE_CODE), fse.getInteger(CoreConst.CPAGE), fse.getInteger(CoreConst.PAGESIZE)));
+        } catch (BaseException e) {
+            e.printStackTrace();
+            return this.error(e);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return this.error(SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getText() + e.getMessage());
+        }
+    }
+    
+    /**
+     * 	椤圭洰鍒嗛」-淇濆瓨
+     *
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "/save/{version}", method = RequestMethod.POST)
+    @ApiVersion(1)
+    public String saveProjectItem(HttpServletRequest request) {
+        try {
+            // 鑾峰彇鍙傛暟
+            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
+            return OK_List(projectItemizeService.saveProjectItem(fse));
+        } catch (BaseException e) {
+            e.printStackTrace();
+            return this.error(e);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return this.error(SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getText() + e.getMessage());
+        }
+    }
+    
+    /**
+     * 	椤圭洰鍒嗛」-鍒犻櫎
+     *
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "/delete/{version}", method = RequestMethod.POST)
+    @ApiVersion(1)
+    public String deleteProjectItem(HttpServletRequest request) {
+        try {
+            // 鑾峰彇鍙傛暟
+            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
+            
+            //鍒ゆ柇project_uuid鏄惁涓虹┖
+            if (BaseUtil.strIsNull(fse.getString(Cmnconst.PROJECT_UUID)) || BaseUtil.strIsNull(fse.getString(Cmnconst.PROJECT_UUID))) {
+                return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
+            }
+            
+            boolean succ = projectItemizeService.deleteProjectItem(fse.getUUID(), fse.getString(Cmnconst.PROJECT_UUID));
+            if (succ) {
+				return OK();
+			}
+            return this.error(SystemCode.PROJECT_ITEMIZE_DEL_FAIL.getValue(), SystemCode.PROJECT_ITEMIZE_DEL_FAIL.getText());
+        } catch (BaseException e) {
+            e.printStackTrace();
+            return this.error(e);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return this.error(SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getValue(),
+                    SystemCode.PROJECT_ITEMIZE_OPERATE_ERROR.getText() + e.getMessage());
+        }
+    }
+}
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..118b9ff 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,13 +15,138 @@
 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	 瑙f瀽鏁版嵁
+	 * @param headerDataList excel鏍囬鏁版嵁
+	 */
+	public DataTableEntity importBudget2(DataTableEntity dtParseData, List<List<String>> headerDataList) {
+		//鍒ゆ柇鏄惁鏈夎В鏋怑XCEL鏁版嵁
+		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涓轰笂涓�涓猣ield鍒嗛」瀵瑰簲鐨刄UID
+			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;
+	}
 
 	/**
 	 * 	椤圭洰棰勭畻瀵煎叆
diff --git a/product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java b/product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java
index e7de973..85f9d23 100644
--- a/product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java
+++ b/product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java
@@ -228,7 +228,7 @@
     public void deleteItemizeValidate(String uuid) {
         DataTableEntity dtBudget = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_BUDGET, "budget_code=?", new Object[]{uuid});
         if (!BaseUtil.dataTableIsEmpty(dtBudget)) {
-            throw new BaseException(SystemCode.PROJECT_MANAGEMENT_ITEMIZE_DEL_FAIL.getValue(), SystemCode.PROJECT_MANAGEMENT_ITEMIZE_DEL_FAIL.getText());
+            throw new BaseException(SystemCode.PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET.getValue(), SystemCode.PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET.getText());
         }
     }
 
@@ -282,7 +282,6 @@
      * @param uuid
      * @return
      */
-
     public JSONArray getTreeProjectItem(String uuid) {
         DataTableEntity dtProjectItemize = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid=?", new Object[]{uuid}, new Object[]{CoreConst.UUID, Cmnconst.ITEMIZE, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE});
         DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(dtProjectItemize, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
diff --git a/product-server-project-management/src/main/java/com/product/project/management/service/ProjectItemizeService.java b/product-server-project-management/src/main/java/com/product/project/management/service/ProjectItemizeService.java
new file mode 100644
index 0000000..f9c7783
--- /dev/null
+++ b/product-server-project-management/src/main/java/com/product/project/management/service/ProjectItemizeService.java
@@ -0,0 +1,142 @@
+package com.product.project.management.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.product.core.config.CoreConst;
+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.project.management.util.ProjectItemUtil;
+import com.product.util.BaseUtil;
+
+@Component
+public class ProjectItemizeService extends AbstractBaseService{
+
+	@Autowired
+	BaseDao baseDao;
+	
+	
+	/**
+	 * 	椤圭洰鍒嗛」-椤圭洰鏍戯紙涓诲瓙椤圭洰锛�
+	 * @param projectUUID	椤圭洰UUID
+	 * @return
+	 */
+	public DataTableEntity getProjectTree(String projectUUID) {
+		FieldSetEntity fseProjectInfo = baseDao.getFieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW, projectUUID, false);
+		if (fseProjectInfo == null) {
+			return null;
+		}
+        DataTableEntity dtProjectItemize = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid=?", new Object[]{projectUUID}, new Object[]{CoreConst.UUID, Cmnconst.ITEMIZE, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE});
+        if (!BaseUtil.dataTableIsEmpty(dtProjectItemize)) {
+            DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(dtProjectItemize, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
+            return newDtProjectItem;
+        }
+        return null;
+	}
+	
+	/**
+	 *	椤圭洰鍒嗛」-鍒楄〃锛堝睍绀洪�変腑鍒嗛」鐨勪笅涓�绾у垪琛級
+	 * @param projectUUID
+	 * @param itemizeCode
+	 * @param capge
+	 * @param pageSize
+	 * @return
+	 */
+	public DataTableEntity listProjectItem(String projectUUID, String itemizeCode, Integer capge, Integer pageSize) {
+		DataTableEntity dtItemizeBudget;
+		if(BaseUtil.strIsNull(itemizeCode) || "000".equals(itemizeCode)) {
+			dtItemizeBudget = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid=? AND itemize_parent_code IS NULL", new Object[] {projectUUID}, null, null, pageSize, capge);
+		}else {
+			dtItemizeBudget = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid=? AND itemize_parent_code=?", new Object[] {projectUUID,itemizeCode}, null, null, pageSize, capge);
+		}
+		
+        //鏌ヨ閫変腑鑺傜偣涓嬫墍鏈夐」鐩垎椤�
+        if (!BaseUtil.dataTableIsEmpty(dtItemizeBudget)) {
+            baseDao.loadPromptData(dtItemizeBudget);
+        }
+        return dtItemizeBudget;
+	}
+	
+	/**
+	 * 	淇濆瓨椤圭洰鍒嗛」
+	 * @param fse
+	 * @return
+	 */
+	public FieldSetEntity saveProjectItem(FieldSetEntity fse) {
+		//鍒ゆ柇鏄惁鏄柊澧�
+		if (BaseUtil.strIsNull(fse.getUUID())) {
+			String projectUUID = fse.getString(Cmnconst.PROJECT_UUID);
+			FieldSetEntity fseMaxProjectItem;
+			String itemizeCode;
+			String itemizeFullName = null;
+			//鍒ゆ柇鏄惁鏈変笂绾�
+			if (BaseUtil.strIsNull(fse.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);
+				if (fseMaxProjectItem==null || BaseUtil.strIsNull(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE))) {
+					itemizeCode = "001";
+				}else {
+					itemizeCode = ProjectItemUtil.autoAddOneCode(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE));
+				}
+				itemizeFullName = fse.getString(Cmnconst.ITEMIZE);
+			}else {
+				fseMaxProjectItem = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, new String[] {"Max(itemize_code)itemize_code"}, "project_uuid = ? AND itemize_parent_code = ?", new Object[] {projectUUID, fse.getString(Cmnconst.ITEMIZE_PARENT_CODE)}, false, null);
+				if (fseMaxProjectItem==null || BaseUtil.strIsNull(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE))) {
+					itemizeCode = ProjectItemUtil.autoCreateCode(fse.getString(Cmnconst.ITEMIZE_PARENT_CODE));
+				}else {
+					itemizeCode = ProjectItemUtil.autoAddOneCode(fseMaxProjectItem.getString(Cmnconst.ITEMIZE_CODE));
+				}
+				FieldSetEntity itemizeParent = baseDao.getFieldSetEntityByFilter(Cmnconst.PRODUCT_PROJECT_ITEM, "project_uuid =? AND itemize_code=?", new Object[] {projectUUID, fse.getString(Cmnconst.ITEMIZE_PARENT_CODE)}, false);
+				if (itemizeParent!=null) {
+					itemizeFullName = itemizeParent.getString(Cmnconst.ITEMIZE_FULL_NAME) + "/" + fse.getString(Cmnconst.ITEMIZE);
+				}
+			}
+			fse.setValue(Cmnconst.ITEMIZE_CODE, itemizeCode);
+			fse.setValue(Cmnconst.ITEMIZE_FULL_NAME, itemizeFullName);
+		}
+		baseDao.saveFieldSetEntity(fse);
+		return fse;
+	}
+	
+	/**
+	 * 	鍒犻櫎椤圭洰鍒嗛」
+	 * @param uuids
+	 * @return
+	 */
+	public boolean deleteProjectItem(String uuids, String projectUUID) {
+		//楠岃瘉鏄惁鐢熸垚棰勭畻
+		StringBuilder sbValidate = new StringBuilder(128);
+		sbValidate.append(" SELECT * FROM product_project_budget ")
+		.append(" WHERE project_itemize_uuid IN( ")
+		.append(" select uuid from product_project_item ")
+		.append(" WHERE project_uuid = ? AND itemize_code REGEXP ( ")
+		.append(" SELECT CONCAT('^',GROUP_CONCAT(itemize_code SEPARATOR '|^')) FROM product_project_item ")
+		.append(" WHERE  ")
+		.append(BaseUtil.buildQuestionMarkFilter(Cmnconst.UUID, uuids.split(","), true))
+		.append(" ) ")
+		.append(" ) ");
+		DataTableEntity dtBudget = baseDao.listTable(sbValidate.toString(), new Object[] {projectUUID});
+		if (!BaseUtil.dataTableIsEmpty(dtBudget)) {
+			throw new BaseException(SystemCode.PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET.getText(), SystemCode.PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET.getValue());
+		}
+		//鍒犻櫎
+		StringBuilder sbDelete = new StringBuilder(128);
+		sbDelete.append(" DELETE from product_project_item ")
+		.append(" WHERE uuid IN( ")
+		.append(" SELECT * FROM( ")
+		.append(" SELECT uuid FROM product_project_item ")
+		.append(" WHERE project_uuid = ? AND itemize_code REGEXP ( ")
+		.append(" SELECT CONCAT('^',GROUP_CONCAT(itemize_code SEPARATOR '|^')) FROM product_project_item ")
+		.append(" WHERE  ")
+		.append(BaseUtil.buildQuestionMarkFilter(Cmnconst.UUID, uuids.split(","), true))
+		.append(" ) ")
+		.append(" )A ")
+		.append(" ) ");
+		
+		return baseDao.executeUpdate(sbDelete.toString(), new Object[] {projectUUID});
+	}
+}
diff --git a/product-server-project-management/src/main/java/com/product/project/management/util/ProjectItemUtil.java b/product-server-project-management/src/main/java/com/product/project/management/util/ProjectItemUtil.java
new file mode 100644
index 0000000..1d8eef1
--- /dev/null
+++ b/product-server-project-management/src/main/java/com/product/project/management/util/ProjectItemUtil.java
@@ -0,0 +1,51 @@
+package com.product.project.management.util;
+
+import com.product.util.BaseUtil;
+
+public class ProjectItemUtil {
+
+	/**
+	 * 	鏍规嵁鍚岀骇鏈�澶х紪鐮侊紝鑷姩鐢熸垚褰撳墠缂栫爜
+	 * @param oldCode	鍚岀骇鏈�澶х紪鐮�
+	 * @return
+	 */
+	public static String autoAddOneCode(String oldCode) {
+		if (BaseUtil.strIsNull(oldCode)) {
+			oldCode = "000";
+		}
+		String lastCode = null;
+		String prefixCode = null;
+		if (oldCode.contains("-")) {
+			lastCode = oldCode.substring(oldCode.lastIndexOf("-")+1, oldCode.length());
+			prefixCode = oldCode.substring(0, oldCode.lastIndexOf("-")+1);
+		}else {
+			lastCode = oldCode;
+		}
+		
+		int codeNum = Integer.parseInt(lastCode);
+		codeNum++;
+		
+		String finalLastCode;
+		if (codeNum<10) {
+			finalLastCode="00"+codeNum;
+		}else if(codeNum<100) {
+			finalLastCode = "0"+codeNum;
+		}else {
+			finalLastCode = ""+codeNum;
+		}
+		
+		return (BaseUtil.strIsNull(prefixCode)) ? finalLastCode:prefixCode+finalLastCode;
+	}
+	
+	public static String autoCreateCode(String parentCode) {
+		if (BaseUtil.strIsNull(parentCode)) {
+			return "001";
+		}else {
+			return parentCode+"-001";
+		}
+	}
+	
+	public static void main(String[] args) {
+		System.out.println(autoCreateCode(""));
+	}
+}

--
Gitblit v1.9.2