From f7c979c86acaecb1ed22dbf0ea17991a2c88f587 Mon Sep 17 00:00:00 2001
From: 354798ggg <1074825718@qq.com>
Date: 星期五, 01 十二月 2023 10:34:01 +0800
Subject: [PATCH] BUG优化

---
 product-server-project-base/src/main/java/com/product/base/service/MaterialManagerService.java |   67 +++++++++++++++++++++++----------
 1 files changed, 47 insertions(+), 20 deletions(-)

diff --git a/product-server-project-base/src/main/java/com/product/base/service/MaterialManagerService.java b/product-server-project-base/src/main/java/com/product/base/service/MaterialManagerService.java
index 6b035b3..16cc6d5 100644
--- a/product-server-project-base/src/main/java/com/product/base/service/MaterialManagerService.java
+++ b/product-server-project-base/src/main/java/com/product/base/service/MaterialManagerService.java
@@ -1,12 +1,17 @@
 package com.product.base.service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import com.product.base.config.BaseErrorCode;
 import com.product.base.config.CmnConst;
 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.core.spring.context.SpringMVCContextHolder;
 import com.product.module.sys.entity.SystemUser;
@@ -28,7 +33,35 @@
 	 * @return
 	 */
 	public DataTableEntity getMaterialTypeTree() {
-		return baseDao.listTable(CmnConst.PRODUCT_SYS_DICT, "dict_name=?", new Object[] {CmnConst.MATERIAL_TYPE});
+		return baseDao.listTable(CmnConst.PRODUCT_PROJECT_BASE_MATERIAL_TYPE);
+	}
+	
+	/**
+	 * 	鏂板鏉愭枡绫诲瀷
+	 * @param fse
+	 * @return
+	 */
+	public String saveMaterialType(FieldSetEntity fse) {
+		if (BaseUtil.strIsNull(fse.getUUID())) {
+			FieldSetEntity fseMaxValue = baseDao.getFieldSetEntityBySQL("SELECT IFNULL((MAX(material_type_value) + 1),0) material_type_value FROM product_project_base_material_type", new Object[] {}, false);
+			fse.setValue(CmnConst.MATERIAL_TYPE_VALUE, fseMaxValue.getString(CmnConst.MATERIAL_TYPE_VALUE));
+		} else {
+			if ("0".equals(fse.getString(CmnConst.IS_USED))) {
+				StringBuilder sb = new StringBuilder(256);
+				sb.append("SELECT SUM(num)num FROM ( ")
+				.append(" select COUNT(*)num from product_project_budget A  where a.material_type=? ")
+				.append(" UNION ALL ")
+				.append(" select COUNT(*)num from product_project_base_material WHERE  FIND_IN_SET (?,material_type)>0 ")
+				.append(" )A ");
+				FieldSetEntity fseCount = baseDao.getFieldSetEntityBySQL(sb.toString(), new Object[] { fse.getString("material_type_value"),fse.getString("material_type_value") }, false);
+				if (fseCount.getInteger("num")<1) {
+					baseDao.executeUpdate("DELETE FROM product_project_base_material_type WHERE uuid=?", new Object[] {fse.getUUID()});
+					return fse.getUUID();
+				}
+			}
+		}
+		baseDao.saveFieldSetEntity(fse);
+		return fse.getUUID();
 	}
 	
 	/**
@@ -41,21 +74,13 @@
 		if (BaseUtil.strIsNull(fse.getString(CmnConst.MATERIAL_TYPE)) || fse.getInteger(CmnConst.MATERIAL_TYPE)==-1) {
 			dt = baseDao.listTable(CmnConst.PRODUCT_PROJECT_BASE_MATERIAL, null, null, null, null, fse.getInteger(CmnConst.PAGESIZE), fse.getInteger(CmnConst.CPAGE));
 		}else {
-			dt = baseDao.listTable(CmnConst.PRODUCT_PROJECT_BASE_MATERIAL, "material_type=?", new Object[] {fse.getInteger(CmnConst.MATERIAL_TYPE)}, null, null, fse.getInteger(CmnConst.PAGESIZE), fse.getInteger(CmnConst.CPAGE));
+			dt = baseDao.listTable(CmnConst.PRODUCT_PROJECT_BASE_MATERIAL, "CONCAT(',',material_type,',') like ?", new Object[] {"%,"+fse.getInteger(CmnConst.MATERIAL_TYPE)+",%"}, null, null, fse.getInteger(CmnConst.PAGESIZE), fse.getInteger(CmnConst.CPAGE));
 		}
 		
 		baseDao.loadPromptData(dt);
 		return dt;
 	}
 	
-	/**
-	 * 	鑾峰彇鏉愭枡淇℃伅
-	 * @param uuid
-	 * @return
-	 */
-	public FieldSetEntity getMaterialInfo(String uuid) {
-		return baseDao.getFieldSet(CmnConst.PRODUCT_PROJECT_BASE_MATERIAL, uuid, false);
-	}
 	
 	/**
 	 * 	淇濆瓨鏉愭枡淇℃伅
@@ -63,22 +88,24 @@
 	 * @return
 	 */
 	public boolean saveMaterialInfo(FieldSetEntity fse) {
+		
+		//楠岄噸鏉′欢
+		String filter = "material_code=?";
+		List<String> param = new ArrayList<>();
+		param.add(fse.getString(CmnConst.MATERIAL_CODE));
+		
 		SystemUser sysUser = SpringMVCContextHolder.getCurrentUser();
 		if (BaseUtil.strIsNull(fse.getUUID())) {
 			BaseUtil.createCreatorAndCreationTime(sysUser, fse);
 		}else {
+			filter += " AND uuid !=?";
+			param.add(fse.getUUID());
 			BaseUtil.updatedRegeneratorAndUpdateTime(sysUser, fse);
 		}
+		FieldSetEntity fseExistMaterialCode = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_PROJECT_BASE_MATERIAL, filter, param.toArray(), false);
+		if (fseExistMaterialCode!=null) {
+			throw new BaseException(BaseErrorCode.PROJECT_BASE_MATERIAL_CODE_REPEAT.getValue(), BaseErrorCode.PROJECT_BASE_MATERIAL_CODE_REPEAT.getText());
+		}
 		return baseDao.saveFieldSetEntity(fse);
-	}
-	
-	/**
-	 * 	鍒犻櫎鏉愭枡淇℃伅
-	 * @param uuid
-	 * @return
-	 */
-	public boolean deleteMaterialInfo(String uuid) {
-		Object [] uuids= uuid.split(",");
-		return baseDao.delete(CmnConst.PRODUCT_PROJECT_BASE_MATERIAL, "uuid=?", uuids);
 	}
 }

--
Gitblit v1.9.2