package com.product.project.management.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.product.core.dao.BaseDao; import com.product.core.entity.DataTableEntity; import com.product.core.service.support.AbstractBaseService; /** * 项目入库统计报表 * @author 86151 * */ @Component public class ProjectInventoryReportService extends AbstractBaseService{ @Autowired BaseDao baseDao; static final String [] monthName = new String [] {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dece"}; /** * 入库统计报表 * @param queryYear * @return */ public DataTableEntity inventoryStatisticReport(String queryYear) { StringBuilder sb = new StringBuilder(1024); //原始数据 sb.append(" WITH rawData AS(") .append(" SELECT A.material_code, MONTH(B.inbound_date)inbound_month, A.inbound_number ") .append(" FROM product_project_purchase_inbound_sub A ") .append(" LEFT JOIN product_project_purchase_inbound B ON A.inbound_uuid = B.uuid ") .append(" WHERE YEAR(inbound_date) = ").append(queryYear) .append(" ), "); //行专列数据 sb.append(" convertData AS( ") .append(" SELECT material_code, "); for (int i = 0; i < monthName.length; i++) { sb.append("SUM(CASE WHEN inbound_month = ").append(i+1).append(" THEN inbound_number END) AS ").append(monthName[i]).append(","); } sb.append(" ROUND(SUM(inbound_number)/1000, 1) AS YearSummary ") .append(" FROM rawData ") .append(" GROUP BY material_code ") .append(" ORDER BY material_code ") .append(" ) "); //底部汇总 sb.append(" SELECT * FROM convertData ") .append(" UNION ALL ") .append(" SELECT '月总计(t)', "); for (int i = 0; i < monthName.length; i++) { sb.append("ROUND(SUM(").append(monthName[i]).append(")/1000, 1),"); } sb.append(" SUM(YearSummary) ") .append(" FROM convertData "); return baseDao.listTable(sb.toString(), new Object[] {}); } }