From 43025ddd71ae80c16405eef391d102d30f83627b Mon Sep 17 00:00:00 2001
From: 354798ggg <1074825718@qq.com>
Date: 星期五, 21 七月 2023 09:26:33 +0800
Subject: [PATCH] Merge branch 'master' of http://nonxin.cn:8090/r/project/qxlw

---
 product-server-project-management/src/main/java/com/product/project/management/service/ProjectInfoService.java |  322 ++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 280 insertions(+), 42 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 db98869..08bb879 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,15 @@
 package com.product.project.management.service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
+import com.alibaba.fastjson.JSONArray;
 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;
@@ -14,47 +19,280 @@
 import com.product.project.management.config.SystemCode;
 import com.product.util.BaseUtil;
 
-@Component("qxlw-project-service")
-public class ProjectInfoService extends AbstractBaseService{
+import cn.hutool.json.JSONObject;
 
-	@Autowired
-	BaseDao baseDao;
-	
-	/**
-	 * 	閫氳繃椤圭洰绫诲瀷鑾峰彇椤圭洰鍒嗛」锛堣幏鍙栨ā鏉垮垎椤癸級
-	 * @param projectType
-	 * @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_CODE});
-		if (!BaseUtil.dataTableIsEmpty(dtProjectItem)) {
-			DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(dtProjectItem, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
-			return newDtProjectItem;
-		}
-		return null;
-	}
-	
-	/**
-	 * 	閫氳繃椤圭洰涓昏〃鑾峰彇椤圭洰鍒嗛」锛堣幏鍙栦繚瀛樼殑瀛愯〃鍒嗛」锛�
-	 * @param uuid
-	 * @return
-	 */
-	public FieldSetEntity getProjectItem(String uuid) {
-		FieldSetEntity fseProject = baseDao.getFieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW, uuid, true);
-		DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(fseProject.getSubDataTable(Cmnconst.PRODUCT_PROJECT_ITEM), Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
-		Map<String, DataTableEntity>dtSubTable = fseProject.getSubData();
-		dtSubTable.put(Cmnconst.PRODUCT_PROJECT_ITEM, newDtProjectItem);
-		return fseProject;
-	}
-	
-	/**
-	 * 	鍒犻櫎瀛愰」楠岃瘉锛堝凡缁忕敓鎴愰绠楃殑瀛愰」涓嶈兘鍒犻櫎锛�
-	 * @param uuid
-	 */
-	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());
-		}
-	}
+@Component("qxlw-project-service")
+public class ProjectInfoService extends AbstractBaseService {
+
+    @Autowired
+    BaseDao baseDao;
+
+    /**
+     * 閫氳繃椤圭洰绫诲瀷鑾峰彇椤圭洰鍒嗛」锛堣幏鍙栨ā鏉垮垎椤癸級
+     *
+     * @param projectType
+     * @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_TYPE, Cmnconst.ITEMIZE_PARENT_CODE});
+        if (!BaseUtil.dataTableIsEmpty(dtProjectItem)) {
+            DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(dtProjectItem, Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
+            return newDtProjectItem;
+        }
+        return null;
+    }
+
+    /**
+     * 閫氳繃椤圭洰UUID鑾峰彇椤圭洰鍒嗛」锛堣幏鍙栦繚瀛樼殑瀛愯〃鍒嗛」--澶氫釜鏍戯級
+     *
+     * @param uuid
+     * @return
+     */
+    public FieldSetEntity getProjectItem(String uuid) {
+        FieldSetEntity fseProject = baseDao.getFieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW, uuid, true);
+        DataTableEntity newDtProjectItem = BaseUtil.dataTableToTreeTable(fseProject.getSubDataTable(Cmnconst.PRODUCT_PROJECT_ITEM), Cmnconst.ITEMIZE_CODE, Cmnconst.ITEMIZE_PARENT_CODE, null);
+        Map<String, DataTableEntity> dtSubTable = fseProject.getSubData();
+        dtSubTable.put(Cmnconst.PRODUCT_PROJECT_ITEM, newDtProjectItem);
+        return fseProject;
+    }
+
+    /**
+     * 閫氳繃椤圭洰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 outboundInfo = new StringBuilder(512);
+        outboundInfo.append(" WITH outbound AS( ")
+        .append(" SELECT project_uuid,itemize,material_type,material_code,SUM(outbound_weight)outbound_weight FROM ( ")
+        .append(" SELECT ")
+        .append(" A.project_uuid, ")
+        .append(" B.material_type,B.material_code,B.outbound_weight, ")
+        .append(" (SELECT itemize FROM product_project_item WHERE project_uuid = A.project_uuid AND itemize_code = substring(C.itemize_code,1,7)) itemize ")
+        .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_item C ON C.uuid = A.project_itemize ")
+        .append(" WHERE A.flow_flag=2 AND A.project_uuid=? ")
+        .append(" )A GROUP BY project_uuid,itemize,material_type,material_code ")
+        .append(" )");
+        //鍑哄簱淇℃伅鎿嶄綔锛堟灦绔嬬瓔鍜屽0娴嬬涓嶅睍绀哄瀷鍙锋眹鎬绘眰鍜岃杞垪锛屾櫘閫氶挗绛嬪拰缃戠墖灞曠ず鍨嬪彿锛屾牴鎹」鐩垎椤瑰叧鑱旀眹鎬伙級
+        StringBuilder operateInfo = new StringBuilder(1024);
+        operateInfo.append(" ,getItemizeSum AS( ")
+        .append(" SELECT itemize,SUM(outbound_weight)total_outbound_weight FROM outbound WHERE material_type IN (0,1) GROUP BY itemize ")
+        .append(" ),allitemize AS( ")
+        .append(" SELECT itemize FROM outbound GROUP BY itemize ")
+        .append(" ),intermediateData1 AS( ")
+        .append(" SELECT A.itemize,SUM(IF(`material_type`='1',outbound_weight,0)) as 'JLJ',SUM(IF(`material_type`='2',outbound_weight,0)) as 'SCG' ")
+        .append(" FROM ( SELECT itemize FROM outbound GROUP BY itemize )A ")
+        .append(" LEFT JOIN ( ")
+        .append(" SELECT project_uuid,itemize,material_type,CASE WHEN material_type=1 THEN '鏋剁珛绛�' ELSE '澹版祴绠�' END AS material_code,SUM(outbound_weight)outbound_weight ")
+        .append(" FROM outbound ")
+        .append(" WHERE material_type IN (1,2) ")
+        .append(" GROUP BY project_uuid,itemize,material_type ")
+        .append(" ) B ON A.itemize = B.itemize ")
+        .append(" GROUP BY A.itemize ")
+        .append(" ),intermediateData2 AS( ")
+        .append(" SELECT project_uuid,itemize,material_type,material_code,outbound_weight FROM outbound WHERE material_type IN (0,3) ")
+        .append(" ),intermediateData3 AS( ")
+        .append(" SELECT A.itemize,A.total_outbound_weight,A.jlj,A.scg,B.material_type,material_code,outbound_weight FROM( ")
+        .append(" SELECT A.itemize,C.total_outbound_weight,B.jlj,B.scg ")
+        .append(" FROM allitemize A ")
+        .append(" LEFT JOIN intermediateData1 B ON A.itemize = B.itemize ")
+        .append(" LEFT JOIN getItemizeSum C ON A.itemize = C.itemize ")
+        .append(" )A ")
+        .append(" LEFT JOIN intermediateData2 B ON A.itemize = B.itemize ")
+        .append(" ) ")
+        .append(" select * from intermediateData3 ");
+        
+        StringBuilder totalSum = new StringBuilder("");
+        totalSum.append(" SELECT material_code,SUM(outbound_weight)outbound_weight FROM outbound WHERE material_type IN (0,3) GROUP BY material_code ")
+        .append(" UNION ALL ")
+        .append(" SELECT CASE WHEN material_type=1 THEN 'JLJ' WHEN material_type=2 THEN 'SCG' END,SUM(outbound_weight) FROM outbound WHERE material_type IN (1,2) GROUP BY material_type ")
+        .append(" UNION ALL ")
+        .append(" SELECT '鍚堣',SUM(outbound_weight) FROM outbound WHERE material_type IN (0,1,3) GROUP BY project_uuid ");
+        
+        //鑾峰彇SQL瑙f瀽鐨勫熀鏈暟鎹紝鍒╃敤JAVA灏嗛」鐩垎椤瑰搴旂殑涓嶅悓鏉愭枡琛岃浆鍒�
+        DataTableEntity dtItemizeInfo = baseDao.listTable(outboundInfo.toString() + operateInfo.toString(), new Object[]{project_uuid});
+        if (!BaseUtil.dataTableIsEmpty(dtItemizeInfo)) {
+
+            Map<String, FieldSetEntity> convertData = new HashMap<>();
+            String[] materialTypes = new String[4];
+
+            //閫氳繃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(materialCode)) {
+                    if (BaseUtil.strIsNull(materialTypes[materialType])) {
+                        materialTypes[materialType] = materialCode;
+                    } else {
+                    	if(materialTypes[fseItemize.getInteger(Cmnconst.MATERIAL_TYPE)].indexOf(materialCode)<0) {
+                    		materialTypes[fseItemize.getInteger(Cmnconst.MATERIAL_TYPE)] += "," + materialCode;
+                    	}
+                    }
+				}
+
+                //鏀堕泦琛岃浆鍒楁暟鎹�
+                String itemize = fseItemize.getString(Cmnconst.ITEMIZE);
+                if (convertData.containsKey(itemize)) {
+                    convertData.get(itemize).setValue(materialCode, outboundWeight);
+                } else {
+                    FieldSetEntity fseConvertData = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW);
+                    fseConvertData.setValue(Cmnconst.ITEMIZE, itemize);
+                    fseConvertData.setValue(Cmnconst.TOTAL_OUTBOUND_WEIGHT, fseItemize.getString(Cmnconst.TOTAL_OUTBOUND_WEIGHT));
+                    fseConvertData.setValue(materialCode, outboundWeight);
+                    fseConvertData.setValue("jlj", fseItemize.getString("jlj"));
+                    fseConvertData.setValue("scg", fseItemize.getString("scg"));
+                    convertData.put(itemize, fseConvertData);
+                }
+            }
+            
+            //璁$畻姹囨��
+            DataTableEntity dtTotalInfo = baseDao.listTable(outboundInfo.toString() + totalSum.toString(), new Object[]{project_uuid});
+            FieldSetEntity fseConvertData = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW);
+            if (!BaseUtil.dataTableIsEmpty(dtTotalInfo)) {
+				for (int i = 0; i < dtTotalInfo.getRows(); i++) {
+					FieldSetEntity fseTotalInfo = dtTotalInfo.getFieldSetEntity(i);
+					String materialCode = fseTotalInfo.getString(Cmnconst.MATERIAL_CODE);
+					String outboundWeight = fseTotalInfo.getString(Cmnconst.OUTBOUND_WEIGHT);
+					if (!BaseUtil.strIsNull(materialCode) && !BaseUtil.strIsNull(outboundWeight)) {
+						if ("鍚堣".equals(materialCode)) {
+							fseConvertData.setValue(Cmnconst.ITEMIZE, "鍚堣");
+							fseConvertData.setValue(Cmnconst.TOTAL_OUTBOUND_WEIGHT, outboundWeight);
+						}else {
+							fseConvertData.setValue(materialCode, outboundWeight);
+						}
+					}
+				}
+			}
+            
+            //灏嗘暟鎹浆涓篋ataTableEntity杩斿洖
+            if (!convertData.isEmpty()) {
+                DataTableEntity finalConvertData = new DataTableEntity();
+                convertData.forEach((k, v) -> {
+                    finalConvertData.addFieldSetEntity(v);
+                });
+                finalConvertData.addFieldSetEntity(fseConvertData);
+                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
+     */
+    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_ITEMIZE_DEL_FAIL_HAS_BUDGET.getValue(), SystemCode.PROJECT_ITEMIZE_DEL_FAIL_HAS_BUDGET.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;
+    }
+
+    /**
+     * 鏇村叿椤圭洰鍒嗛」uuid鑾峰彇椤圭洰鍒嗛」涓嬬殑鏉愭枡
+     * @param uuid
+     * @param capge
+     * @param pageSize
+     * @return
+     */
+    public DataTableEntity listMaterialV(String uuid, Integer capge, Integer pageSize) {
+        return baseDao.listTable("product_project_base_material_v","project_itemize_uuid=?",new String[]{uuid},null,null,pageSize, capge);
+    }
+    /**
+     * 鏇村叿浠撳簱鍜屾潗鏂欒幏鍙栧簱瀛�
+     * @return
+     */
+    public FieldSetEntity findInventoryV(String warehouse_uuid, String material_uuid) {
+        return baseDao.getFieldSetByFilter("product_project_inventory_v","warehouse_uuid=? and uuid=?",new String[]{warehouse_uuid,material_uuid},false);
+    }
+    /**
+     * 鏍规嵁椤圭洰uuid鑾峰彇椤圭洰鍒嗛」鏍戠粨鏋�
+     * @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);
+        JSONArray objects = BaseUtil.dataTableEntityToJson(newDtProjectItem);
+        JSONObject json = new JSONObject();
+        json.set("itemize", "椤圭洰鍒嗛儴鍒嗛」");
+        json.set("children", objects);
+        json.set("type", 1);
+        JSONArray array = new JSONArray();
+        array.add(json);
+        return array;
+    }
 }

--
Gitblit v1.9.2