354798ggg
2023-12-01 75339563cebc86759a1e8addab9ab5382b4fd1a1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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[] {});
    }
}