From 87e8b958288e719fd15ad4295b50a475a2fbec3f Mon Sep 17 00:00:00 2001 From: 2369059705@qq.com <2369059705@qq.com> Date: 星期一, 17 七月 2023 14:33:07 +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 | 323 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 281 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 09fc076..c92d062 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,281 @@ 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_PARENT_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_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; + } + + /** + * 鏇村叿椤圭洰鍒嗛」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