From 3b0d2e394dddb504452bb492203bd1b2fff05fde Mon Sep 17 00:00:00 2001
From: 354798ggg <1074825718@qq.com>
Date: 星期三, 28 六月 2023 09:21:07 +0800
Subject: [PATCH] 项目数据统计分析

---
 product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java |  136 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 134 insertions(+), 2 deletions(-)

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 09fc076..f298f33 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
@@ -1,10 +1,14 @@
 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.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;
@@ -13,6 +17,8 @@
 import com.product.project.management.config.Cmnconst;
 import com.product.project.management.config.SystemCode;
 import com.product.util.BaseUtil;
+
+import cn.hutool.json.JSONObject;
 
 @Component("qxlw-project-service")
 public class ProjectInfoService extends AbstractBaseService{
@@ -26,7 +32,7 @@
 	 * @return
 	 */
 	public DataTableEntity getProjectTypeItem(String projectType) {
-		DataTableEntity dtProjectItem = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_BASE_PROJECT_ITEM, "itemize_type=?", new Object[] {projectType}, new Object[] {Cmnconst.ITEMIZE, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE});
+		DataTableEntity dtProjectItem = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_BASE_PROJECT_ITEM, "itemize_type=?", new Object[] {projectType}, new Object[] {Cmnconst.ITEMIZE, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_TYPE, Cmnconst.ITEMIZE_PARENT_CODE});
 		if (!BaseUtil.dataTableIsEmpty(dtProjectItem)) {
 			DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(dtProjectItem, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
 			return newDtProjectItem;
@@ -35,7 +41,7 @@
 	}
 	
 	/**
-	 * 	閫氳繃椤圭洰涓昏〃鑾峰彇椤圭洰鍒嗛」锛堣幏鍙栦繚瀛樼殑瀛愯〃鍒嗛」锛�
+	 * 	閫氳繃椤圭洰UUID鑾峰彇椤圭洰鍒嗛」锛堣幏鍙栦繚瀛樼殑瀛愯〃鍒嗛」--澶氫釜鏍戯級
 	 * @param uuid
 	 * @return
 	 */
@@ -48,6 +54,105 @@
 	}
 	
 	/**
+	 * 	閫氳繃椤圭洰UUID鑾峰彇椤圭洰鍒嗛」锛堣幏鍙栦繚瀛樼殑瀛愯〃鍒嗛」--鍗曚釜鏍戯級
+	 * @param uuid
+	 * @return
+	 */
+	public DataTableEntity getProjectAllItem(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});
+		if (!BaseUtil.dataTableIsEmpty(dtProjectItemize)) {
+			DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(dtProjectItemize,Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
+			return newDtProjectItem;
+		}
+		return null;
+	}
+	
+	/**
+	 * 	鑾峰彇鎵�鏈夐」鐩俊鎭�
+	 * @return
+	 */
+	public DataTableEntity listProject() {
+		return baseDao.listTable(Cmnconst.PRODUCT_PROJECT_QXLW, null, null, new Object[] {CoreConst.UUID, Cmnconst.PROJECT_NAME});
+	}
+	
+	/**
+	 * 	椤圭洰鏁版嵁鍒嗘瀽
+	 * @param project_uuid
+	 * @return
+	 */
+	public JSONObject statistAnalysis(String project_uuid) {
+		
+		JSONObject returnJson = new JSONObject();
+		
+		//鑾峰彇鏁版嵁搴撳師濮嬫暟鎹�
+		StringBuilder sb = new StringBuilder();
+		sb.append("WITH outbound AS(")
+		.append(" SELECT A.project_uuid,A.project_itemize,C.material_type,B.material_code,SUM(B.outbound_weight)outbound_weight ")
+		.append(" FROM product_project_outbound A ")
+		.append(" LEFT JOIN product_project_outbound_sub B ON A.uuid=B.outbound_uuid ")
+		.append(" LEFT JOIN product_project_base_material C ON B.material_uuid = C.uuid ")
+		.append(" WHERE project_uuid = ? ")
+		.append(" GROUP BY A.project_uuid,A.project_itemize,C.material_type,B.material_code ")
+		.append(" ) ")
+		.append(" SELECT A.project_uuid,A.project_itemize,A.total_outbound_weight,B.material_type,B.material_code,B.outbound_weight ")
+		.append(" FROM ( ")
+		.append(" SELECT project_uuid,project_itemize,SUM(outbound_weight)total_outbound_weight ")
+		.append(" FROM outbound ")
+		.append(" GROUP BY project_uuid,project_itemize ")
+		.append(" )A ")
+		.append(" RIGHT JOIN outbound B ON A.project_uuid=B.project_uuid AND A.project_itemize=B.project_itemize ");
+		DataTableEntity dtItemizeInfo = baseDao.listTable(sb.toString(), new Object[] {project_uuid});
+		if(!BaseUtil.dataTableIsEmpty(dtItemizeInfo)) {
+			
+			Map<String, FieldSetEntity> convertData = new HashMap<>();
+			String [] materialTypes = new String[3];
+			
+			//閫氳繃Java寰幆灏�"鏉愭枡"鍜�"鍑哄簱閲�"鏁版嵁琛岃浆鍒�
+			for (int i = 0; i < dtItemizeInfo.getRows(); i++) {
+				FieldSetEntity fseItemize = dtItemizeInfo.getFieldSetEntity(i);
+				
+				//鑾峰彇鏉愭枡缂栫爜锛屾潗鏂欑被鍨嬶紝鍑哄簱閲�
+				String materialCode = fseItemize.getString(Cmnconst.MATERIAL_CODE);
+				String outboundWeight = fseItemize.getString(Cmnconst.OUTBOUND_WEIGHT);
+				Integer materialType = fseItemize.getInteger(Cmnconst.MATERIAL_TYPE);
+				
+				//鏀堕泦鑾峰彇鎵�鏈夎〃澶村垪锛堟潗鏂欑紪鐮侊級
+				if (BaseUtil.strIsNull(materialTypes[materialType])) {
+					materialTypes[materialType] = materialCode;
+				}else {
+					materialTypes[fseItemize.getInteger(Cmnconst.MATERIAL_TYPE)]+=","+materialCode;
+				}
+				
+				//鏀堕泦琛岃浆鍒楁暟鎹�
+				String itemize = fseItemize.getString(Cmnconst.PROJECT_ITEMIZE);
+				if(convertData.containsKey(itemize)) {
+					convertData.get(itemize).setValue(materialCode, outboundWeight);
+				}else {
+					FieldSetEntity fseConvertData = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW);
+					fseConvertData.setValue(Cmnconst.PROJECT_ITEMIZE, itemize);
+					fseConvertData.setValue(Cmnconst.TOTAL_OUTBOUND_WEIGHT, fseItemize.getString(Cmnconst.TOTAL_OUTBOUND_WEIGHT));
+					fseConvertData.setValue(materialCode, outboundWeight);
+					convertData.put(itemize, fseConvertData);
+				}
+			}
+			//灏嗘暟鎹浆涓篋ataTableEntity杩斿洖
+			if (!convertData.isEmpty()) {
+				DataTableEntity finalConvertData = new DataTableEntity(); 
+				convertData.forEach((k,v) -> {
+					finalConvertData.addFieldSetEntity(v);
+				});
+				returnJson.set("data", BaseUtil.dataTableEntityToJson(finalConvertData));
+			}
+			for (int i = 0; i < materialTypes.length; i++) {
+				if(!BaseUtil.strIsNull(materialTypes[i])) {
+					returnJson.set("type"+i, materialTypes[i]);
+				}
+			}
+		}
+	    return returnJson;
+	}
+	
+	/**
 	 * 	鍒犻櫎瀛愰」楠岃瘉锛堝凡缁忕敓鎴愰绠楃殑瀛愰」涓嶈兘鍒犻櫎锛�
 	 * @param uuid
 	 */
@@ -57,4 +162,31 @@
 			throw new BaseException(SystemCode.PROJECT_MANAGEMENT_ITEMIZE_DEL_FAIL.getValue(), SystemCode.PROJECT_MANAGEMENT_ITEMIZE_DEL_FAIL.getText());
 		}
 	}
+	
+	/**
+	 * 	鑾峰彇鍒嗛」棰勭畻淇℃伅
+	 * @param projectUUID	椤圭洰UUID
+	 * @param itemizeCode	鍒嗛」缂栫爜
+	 * @param capge			褰撳墠椤�
+	 * @param pageSize		椤靛ぇ灏�
+	 * @return
+	 */
+	public DataTableEntity listItemizeBudget(String projectUUID, String itemizeCode, Integer capge, Integer pageSize) {
+		
+		String filter;
+		List <String> params= new ArrayList<>();
+		if (BaseUtil.strIsNull(itemizeCode)) {
+			filter = "project_itemize_uuid IN (SELECT uuid FROM product_project_item WHERE project_uuid=?)";
+			params.add(projectUUID);
+		}else {
+			filter = "project_itemize_uuid IN (SELECT uuid FROM product_project_item WHERE project_uuid=? AND itemize_code like ?)";
+			params.add(projectUUID);
+			params.add(itemizeCode+"%");
+		}
+		DataTableEntity dtItemizeBudget = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_BUDGET, filter, params.toArray(), null, null, pageSize, capge);
+		if (!BaseUtil.dataTableIsEmpty(dtItemizeBudget)) {
+			baseDao.loadPromptData(dtItemizeBudget);
+		}
+		return dtItemizeBudget;
+	}
 }

--
Gitblit v1.9.2