| | |
| | | |
| | | @Component |
| | | public class ProjectStatisticAnalysisService extends AbstractBaseService{ |
| | | |
| | | |
| | | |
| | | |
| | | @Autowired |
| | | BaseDao baseDao; |
| | | |
| | | |
| | | /** |
| | | * 项目数据分析 |
| | | * |
| | |
| | | public JSONObject statistAnalysis(String project_uuid) { |
| | | |
| | | JSONObject returnJson = new JSONObject(); |
| | | |
| | | |
| | | List<List<String>> listMaterialType = getReportMaterialType(); |
| | | |
| | | //数据库出库信息汇总 |
| | | 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 project_uuid,itemize,material_type,material_model,SUM(outbound_weight)outbound_weight FROM ( ") |
| | | .append(" SELECT ") |
| | | .append(" A.project_uuid,B.material_type,B.material_code,B.outbound_weight, ") |
| | | .append(" A.project_uuid,B.material_type,B.material_model,B.outbound_weight, ") |
| | | .append(" (SELECT itemize FROM product_project_item WHERE project_uuid = A.project_uuid AND itemize_code = substring(C.itemize_code,1,11)) 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(" )A GROUP BY project_uuid,itemize,material_type,material_model ") |
| | | .append(" )"); |
| | | //出库信息操作(getItemizeSum[钢筋和架立筋左侧汇总];allitemize[所有三级分项];intermediateData1[钢筋架立筋按分项汇总];intermediateData2[钢筋网片按分项和材料汇总];intermediateData3[报表成型]) |
| | | StringBuilder operateInfo = new StringBuilder(1024); |
| | |
| | | .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.MATERIAL_TYPE, listMaterialType.get(0).toArray(), true)) |
| | | .append(" GROUP BY itemize ") |
| | | .append(" )") |
| | | |
| | | |
| | | .append(",allitemize AS( ") |
| | | .append(" SELECT itemize FROM outbound GROUP BY itemize ") |
| | | .append(" )") |
| | | |
| | | |
| | | .append(",intermediateData1 AS( ") |
| | | .append(" SELECT A.itemize "); |
| | | for (int i = 0; i < listMaterialType.get(2).size(); i++) { |
| | |
| | | .append(" THEN ") |
| | | .append("'").append(listMaterialType.get(3).get(i)).append("'"); |
| | | } |
| | | |
| | | operateInfo.append(" END AS material_code ") |
| | | |
| | | operateInfo.append(" END AS material_model ") |
| | | .append(" FROM outbound ") |
| | | .append(" WHERE ") |
| | | .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.MATERIAL_TYPE, listMaterialType.get(1).toArray(), false)) |
| | |
| | | .append(" ) B ON A.itemize = B.itemize ") |
| | | .append(" GROUP BY A.itemize ") |
| | | .append(" )") |
| | | |
| | | |
| | | .append(",intermediateData2 AS( ") |
| | | .append(" SELECT project_uuid,itemize,material_type,material_code,outbound_weight FROM outbound WHERE ") |
| | | .append(" SELECT project_uuid,itemize,material_type,material_model,outbound_weight FROM outbound WHERE ") |
| | | .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.MATERIAL_TYPE, listMaterialType.get(1).toArray(), true)) |
| | | .append(" )") |
| | | |
| | | |
| | | .append(",intermediateData3 AS( ") |
| | | .append(" SELECT A.itemize,A.total_outbound_weight,B.material_type,material_code,outbound_weight"); |
| | | .append(" SELECT A.itemize,A.total_outbound_weight,B.material_type,material_model,outbound_weight"); |
| | | for (int i = 0; i < listMaterialType.get(3).size(); i++) { |
| | | operateInfo.append(",A.").append(listMaterialType.get(3).get(i)); |
| | | } |
| | |
| | | .append(" LEFT JOIN intermediateData2 B ON A.itemize = B.itemize ") |
| | | .append(" ) ") |
| | | .append(" select * from intermediateData3 "); |
| | | |
| | | |
| | | StringBuilder totalSum = new StringBuilder(""); |
| | | totalSum.append(" SELECT material_code,ROUND(SUM(outbound_weight),1) outbound_weight FROM outbound WHERE ") |
| | | totalSum.append(" SELECT material_model,ROUND(SUM(outbound_weight),1) outbound_weight FROM outbound WHERE ") |
| | | .append(BaseUtil.buildQuestionMarkFilter(Cmnconst.MATERIAL_TYPE, listMaterialType.get(1).toArray(), true)) |
| | | .append(" GROUP BY material_code ") |
| | | .append(" GROUP BY material_model ") |
| | | .append(" UNION ALL ") |
| | | .append(" SELECT CASE "); |
| | | for (int i = 0; i < listMaterialType.get(2).size(); i++) { |
| | |
| | | .append(" GROUP BY material_type ") |
| | | .append(" UNION ALL ") |
| | | .append(" SELECT '合计',ROUND(SUM(outbound_weight)/1000,1) FROM outbound WHERE material_type IN (0,1,3) GROUP BY project_uuid "); |
| | | |
| | | |
| | | //获取SQL解析的基本数据,利用JAVA将项目分项对应的不同材料行转列 |
| | | DataTableEntity dtItemizeInfo = baseDao.listTable(outboundInfo.toString() + operateInfo.toString(), new Object[]{project_uuid}); |
| | | if (!BaseUtil.dataTableIsEmpty(dtItemizeInfo)) { |
| | |
| | | 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])) { |
| | |
| | | convertData.put(itemize, fseConvertData); |
| | | } |
| | | } |
| | | |
| | | |
| | | //计算汇总 |
| | | DataTableEntity dtTotalInfo = baseDao.listTable(outboundInfo.toString() + totalSum.toString(), new Object[]{project_uuid}); |
| | | FieldSetEntity fseConvertData = new FieldSetEntity(Cmnconst.PRODUCT_PROJECT_QXLW); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | //将数据转为DataTableEntity返回 |
| | | if (!convertData.isEmpty()) { |
| | | DataTableEntity finalConvertData = new DataTableEntity(); |
| | |
| | | } |
| | | return returnJson; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 返回材料类型信息 |
| | | * listSummary 需要汇总的材料 |
| | |
| | | public List<List<String>> getReportMaterialType() { |
| | | DataTableEntity dtMaterialType = baseDao.listTable(Cmnconst.PRODUCT_PROJECT_BASE_MATERIAL_TYPE, null, new Object[] {}, new Object[] {"material_type_name","material_type_value"}); |
| | | if (!BaseUtil.dataTableIsEmpty(dtMaterialType)) { |
| | | |
| | | |
| | | List<List<String>> returnList = new ArrayList<>(); |
| | | List<String> listSummary = new ArrayList<>(); |
| | | List<String> listShowMaterialCode = new ArrayList<>(); |
| | | List<String> listNotShowMaterialCode = new ArrayList<>(); |
| | | List<String> listNotShowMaterialCodeName = new ArrayList<>(); |
| | | |
| | | |
| | | for (int i = 0; i < dtMaterialType.getRows(); i++) { |
| | | String dictValue = dtMaterialType.getFieldSetEntity(i).getString("material_type_value"); |
| | | String dictLabel = dtMaterialType.getFieldSetEntity(i).getString("material_type_name"); |
| | |
| | | returnList.add(listShowMaterialCode); |
| | | returnList.add(listNotShowMaterialCode); |
| | | returnList.add(listNotShowMaterialCodeName); |
| | | |
| | | |
| | | return returnList; |
| | | } |
| | | return null; |