jdbcTemplate execute example

package com.material.dao;

import java.math.BigDecimal;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.CallableStatementCreator;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import com.util.DateTransfer;
import com.util.Util;

public class JdbcDAO extends JdbcDaoSupport{

    
    public void insertMaterial(List<String> list, int i) throws Exception{
        /*if (i > 3000){
            throw new Exception("不好李树超睡着了");
        }*/
        String sql = "insert into MaterialStocked values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        getJdbcTemplate().update(sql,  list.toArray());  
    }
    
    public void deleteFormByNO(String FORMNO){
        String sql = "delete from  MaterialStocked  where FormNO = ?";
        getJdbcTemplate().update(sql,  new Object[]{FORMNO});  
    }
    
    /************************************************* for export material information ****************/    
    public List<String> listMaterials(){
        //String sql = "SELECT distinct MaterialCategory from MaterialStocked where MaterialCategory is not null";
        String sql = "SELECT  MaterialCategory from MaterialStocked where MaterialCategory is not null GROUP BY MaterialCategory order by cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) desc";
        return getJdbcTemplate().queryForList(sql, String.class);
    }
            
    public Map<String, Object> listTotalMaterial(String materialCategory){
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, SUM(Cast(TotalMoneyOTax as decimal(18,2))) SUM_TotalMoneyOTax  from  MaterialStocked  where  MaterialCategory = ?";
        return getJdbcTemplate().queryForMap(sql, new Object[]{materialCategory});
    }
    
    public List<String> listCompanies(){
        String sql = "SELECT distinct Company from  MaterialStocked  where Company is not null";
        return getJdbcTemplate().queryForList(sql, String.class);
    }
    
    public List<Map<String, Object>> listCompanyDetailByMaterial(String material){
        String sql = "select * from (select SUM(Cast(Quantity as decimal(18,2))) SUM_QUANTITY, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax, Company Company1 from MaterialStocked  where MaterialCategory = ?   group by Company) B right join (SELECT distinct Company  from MaterialStocked )A  on B.Company1  = Company";
        return getJdbcTemplate().queryForList(sql, new Object[]{material});
    }
    
    public List<Map<String, Object>> listCompanyDetailByMaterial(String material, String company, String startMonth, String endMonth){
        String sql = "select * from (select SUM(Cast(Quantity as decimal(18,2))) SUM_QUANTITY, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax, Company Company1 from MaterialStocked  where  Convert(datetime, intime ) BETWEEN ? AND ? and  MaterialCategory = ? and Company in "+ company +"    group by Company) B right join (SELECT distinct Company  from MaterialStocked  where Convert(datetime, intime ) BETWEEN ? AND ? and  Company in "+ company +"  )A  on B.Company1  = Company";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{startMonth, endMonth, material,  startMonth, endMonth});
    }
    
    /*****************************************************supplier data for web ***********/    
    public List<Map<String, Object>>  listSummaryByCategory(){
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax, MaterialCategory from MaterialStocked group by MaterialCategory";
        return getJdbcTemplate().queryForList(sql);
    }
    
    //function in condition 3
    public List<Map<String, Object>>  listSummaryByCategory(String startMonth, String endMonth, String category){
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax, MaterialCategory from MaterialStocked  where   Convert(datetime, intime ) BETWEEN ? AND ? and  MaterialCategory in "+ category +"  group by MaterialCategory  order by  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) desc ";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{startMonth , endMonth});
    }
    
    public List<Map<String, Object>>  listSummaryByCategory(String startMonth, String endMonth, String category, String supplier, String tt){
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax, MaterialCategory from MaterialStocked  where   Convert(datetime, intime ) BETWEEN ? AND ? and  MaterialCategory in "+ category +" and  MaterialCategory in (select MaterialCategory from MaterialStock where Supplier like '%?%')  group by MaterialCategory";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{supplier, startMonth , endMonth});
    }
    
    ///function in condition 1
    public List<Map<String, Object>>  listSummaryByCategory(String category){
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax, MaterialCategory from MaterialStocked where MaterialCategory in "+ category +" group by MaterialCategory";        
        return getJdbcTemplate().queryForList(sql);
    }
    
    ///function in condition 2
    public List<Map<String, Object>>  listSummaryByCategory(String category, String company, String startMonth, String endMonth){
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax, MaterialCategory from MaterialStocked where  Convert(datetime, intime ) BETWEEN ? AND ? and  MaterialCategory in "+ category +" and Company in "+ company +"  group by MaterialCategory  order by  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) desc";        
        System.out.println(sql);
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{startMonth , endMonth});
    }
    
    ///function in condition 3
    public List<String>  listSummaryByCategoryNoValue(String category, String company, String startMonth, String endMonth){
        String sql = "select MaterialCategory from MaterialStocked where  Convert(datetime, intime ) BETWEEN ? AND ? and  MaterialCategory in "+ category +" and Company in "+ company +" group by MaterialCategory";        
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{startMonth , endMonth}, String.class);
    }
    
    public List<Map<String, Object>>  listDetailSuppliersByCategory(String material_category,  BigDecimal total_money_tax){
        //按照金额以及数量联合查询
        /*List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getMinNumOfMaterial(material_category);
        String sql = "select  Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  SUM(Cast(TotalMoneyOTax as decimal(18,2)))*100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ?  ORDER BY SUM_TotalMoneyOTax DESC ";
        list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, num});
        if (list == null || list.size() == 0){
            sql = "select top 40 Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  SUM(Cast(TotalMoneyOTax as decimal(18,2)))*100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ?  ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, 1});
        }
        
        if (list == null || list.size() == 0){
            sql = "select top 40 Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  SUM(Cast(TotalMoneyOTax as decimal(18,2)))*100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ?  ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, 0});
        }
        return list;*/
        
        //方案二 按照名次查询
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getRanking_UnDoneOfMaterial(material_category);
        String sql = "select top "+num+" Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  SUM(Cast(TotalMoneyOTax as decimal(18,2)))*100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ?  ORDER BY SUM_TotalMoneyOTax DESC ";
        list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, 1});
    
        if (list == null || list.size() == 0){
            sql = "select top "+num+" Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  SUM(Cast(TotalMoneyOTax as decimal(18,2)))*100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ?  ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, 0});
        }
        return list;
    }
    
    // function in condition1
    public List<Map<String, Object>>  listDetailSuppliersByCategory(String material_category,  BigDecimal total_money_tax, String supplier, String startMonth, String endMonth){
        //按照金额以及数量联合查询
        /*List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getMinNumOfMaterial(material_category);
        String sql = "select Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  SUM(Cast(TotalMoneyOTax as decimal(18,2)))*100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ? and Supplier like '%?%'   and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, supplier, startMonth , endMonth, num});
        if (list == null || list.size() == 0){
            sql = "select top 40 Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  SUM(Cast(TotalMoneyOTax as decimal(18,2)))*100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ? and Supplier like '%?%'   and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, supplier, startMonth , endMonth, 1});
        }
        
        if (list == null || list.size() == 0){
            sql = "select top 40 Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  SUM(Cast(TotalMoneyOTax as decimal(18,2)))*100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ? and Supplier like '%?%'   and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, supplier, startMonth , endMonth, 0});
        }
        return list;*/
        
        //方案二 按照名次查询
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getRanking_UnDoneOfMaterial(material_category);
        String sql = "select top "+num+" Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  SUM(Cast(TotalMoneyOTax as decimal(18,2)))*100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ? and Supplier like '%?%'   and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, supplier, startMonth , endMonth, 1});

        if (list == null || list.size() == 0){
            sql = "select top "+num+" Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  SUM(Cast(TotalMoneyOTax as decimal(18,2)))*100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ? and Supplier like '%?%'   and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, supplier, startMonth , endMonth, 0});
        }
        return list;
    }
    
    // function in condition2
    public List<Map<String, Object>>  listDetailSuppliersByCategory(String material_category,  BigDecimal total_money_tax, String startMonth, String endMonth){
        /*List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getMinNumOfMaterial(material_category);
        String sql = "select  Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) * 100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, startMonth , endMonth, num});
        if (list == null || list.size() == 0){
            sql = "select top 40 Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) * 100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, startMonth , endMonth, num});
        }
        
        if (list == null || list.size() == 0){
            sql = "select top 40 Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) * 100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, startMonth , endMonth, num});
        }
        return list;*/
        
        //方案二 按照名次查询
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getRanking_UnDoneOfMaterial(material_category);
        String sql = "select top "+num+" Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) * 100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, startMonth , endMonth, 1});

        if (list == null || list.size() == 0){
            sql = "select top "+num+" Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2),  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) * 100/?)   SupplierPercent, MaterialCategory  from MaterialStocked where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, startMonth , endMonth, 0});
        }
        return list;
    }
    
    // function in condition3
    public List<Map<String, Object>>  listDetailSuppliersByCategoryNoPercent(String material_category,  BigDecimal total_money_tax, String startMonth, String endMonth){
        //按照金额以及数量联合查询
        /*List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getMinNumOfMaterial(material_category);
        String sql = "select Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,  MaterialCategory  from MaterialStocked where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        list = getJdbcTemplate().queryForList(sql, new Object[]{material_category, startMonth , endMonth, num});
        if (list == null || list.size() == 0){
            sql = "select top 40 Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,  MaterialCategory  from MaterialStocked where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{material_category, startMonth , endMonth, 1});
        }
        
        if (list == null || list.size() == 0){
            sql = "select top 40 Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,  MaterialCategory  from MaterialStocked where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{material_category, startMonth , endMonth, 0});
        }
        return list;*/
        
        //方案二 按照名次查询
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getRanking_UnDoneOfMaterial(material_category);
        String sql = "select top "+num+" Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,  MaterialCategory  from MaterialStocked where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        list = getJdbcTemplate().queryForList(sql, new Object[]{material_category, startMonth , endMonth, 1});

        if (list == null || list.size() == 0){
            sql = "select top "+num+" Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,  MaterialCategory  from MaterialStocked where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, Supplier having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
            list = getJdbcTemplate().queryForList(sql, new Object[]{material_category, startMonth , endMonth, 0});
        }
        return list;
    }
        
    public Map<String, Object> SummarySuppliers(){
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax from MaterialStocked  ";
        return getJdbcTemplate().queryForMap(sql);
    }
    
    // child function 1
    public Map<String, Object> SummarySuppliers(String Category, String company, String startMonth, String endMonth){
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax from MaterialStocked where  Convert(datetime, intime ) BETWEEN ? AND ? and MaterialCategory in "+ Category +" and Company in  " + company + " ";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForMap(sql, new Object[]{startMonth , endMonth});
    }
    
    // child function 2
    public Map<String, Object> SummarySuppliers(String startMonth, String endMonth, String Category){        
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax from MaterialStocked where  Convert(datetime, intime ) BETWEEN ? AND ? and MaterialCategory in "+ Category ;
        System.out.println("sum-------"+  sql);
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForMap(sql, new Object[]{startMonth , endMonth});
    }
    
    public List<Map<String, Object>> SummaryGroupByCompanies(){
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax, Company from MaterialStocked group by Company";
        return getJdbcTemplate().queryForList(sql);
    }
    
    //
    public List<Map<String, Object>> SummaryGroupByCompanies(String Category, String company, String startMonth, String endMonth){
        String sql = "select SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) SUM_TotalMoneyOTax, Company from MaterialStocked   where  Convert(datetime, intime ) BETWEEN ? AND ?  and   MaterialCategory in "+ Category +"  and Company in  " + company + "  group by Company";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{startMonth , endMonth});
    }
    
    //--------------- chart
    public List<Map<String, Object>> listCompanyMoneyByPeriodAndMaterial(String startMonth, String endMonth, String material){
        String sql= "select Company label,  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) value  from MaterialStocked where Convert(datetime, intime ) BETWEEN ? AND ?  and MaterialCategory  = ?  group by Company";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{startMonth , endMonth, material});
    }
    
    public List<Map<String, Object>> listMaterialMoneyByPeriodAndCompany(String startMonth, String endMonth, String company){
        String sql= "select MaterialCategory label,  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) value  from MaterialStocked where Convert(datetime, intime ) BETWEEN ? AND ?  and Company  = ?  group by MaterialCategory";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{startMonth , endMonth, company});
    }
    
    //同一材料不同时间段的引进情况
    public List<Map<String, Object>> listMaterialMoneyPerMonth(String startMonth, String endMonth, String material){
        String sql = "select substring(Intime,0, 8) label,  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) value  from MaterialStocked where Convert(datetime, intime ) BETWEEN ? AND ?  and MaterialCategory  = ?  group by  substring(Intime,0, 8)   order by label asc";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{startMonth , endMonth, material});
    }
    
    //同一公司不同时间段的引进情况
    public List<Map<String, Object>> listCompanyMoneyPerMonth(String startMonth, String endMonth, String company){
        String sql = "select substring(Intime,0, 8) label,  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) value  from MaterialStocked where Convert(datetime, intime ) BETWEEN ? AND ?  and Company  = ?  group by  substring(Intime,0, 8)   order by label asc";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{startMonth , endMonth, company});
    }
    
    //同一公司, 同一材料不同时间段的引进情况
    public List<Map<String, Object>> listCompanyAndMaterialPerMonth(String startMonth, String endMonth, String company, String material){
        String sql = "select substring(Intime,0, 8) label,  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) value  from MaterialStocked where Convert(datetime, intime ) BETWEEN ? AND ?  and Company  = ?  and MaterialCategory = ?  group by  substring(Intime,0, 8)   order by label asc";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        return getJdbcTemplate().queryForList(sql, new Object[]{startMonth , endMonth, company, material});
    }
    
    //录入时间
    public List<String> listInTime(){
        String sql = "select distinct Intime from MaterialStocked order by InTime asc";
        return getJdbcTemplate().queryForList(sql, String.class);
    }
    
    /****************------------------------settled supplier name------------------------------------******************************/        
    // function in condition2
    public List<Map<String, Object>>  listDetailSuppliersByCategorySettled(String material_category,  BigDecimal total_money_tax, String startMonth, String endMonth){
        System.out.println(material_category);
        //按照金额以及数量联合查询
        /*List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getMinNumOfMaterial(material_category);
        String sql = "select ColumnZ Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2), cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) * 100/?)   SupplierPercent, MaterialCategory  from Material_View where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, ColumnZ  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        list =  getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, startMonth , endMonth, num});
        if (list == null || list.size() == 0){
             sql = "select top 20 ColumnZ Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2), cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) * 100/?)   SupplierPercent, MaterialCategory  from Material_View where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, ColumnZ  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC"; 
             list =  getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, startMonth , endMonth, 1});
        }
        
        if (list == null || list.size() == 0){
             sql = "select top 20 ColumnZ Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2), cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) * 100/?)   SupplierPercent, MaterialCategory  from Material_View where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, ColumnZ  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC"; 
             list =  getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, startMonth , endMonth, 0});
        }
        return list;*/
        
        //方案二 按照名次查询
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getRanking_DoneOfMaterial(material_category);        
        String sql = "";
        int money = 1;
        if (material_category.equals("铝单板")){
            money = 250;
        }
        
        sql = "select top "+num+" ColumnZ Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2), cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) * 100/?)   SupplierPercent, MaterialCategory  from Material_View where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, ColumnZ  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        list =  getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, startMonth , endMonth, money});

        if (list == null || list.size() == 0){
            sql = "select top "+num+" ColumnZ Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,   Convert(decimal(18,2), cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) * 100/?)   SupplierPercent, MaterialCategory  from Material_View where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, ColumnZ  having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC";
            list =  getJdbcTemplate().queryForList(sql, new Object[]{total_money_tax, material_category, startMonth , endMonth, 0});
        }
        return list;
    }
    
    // function in condition3
    public List<Map<String, Object>>  listDetailSuppliersByCategoryNoPercentSettled(String material_category,  BigDecimal total_money_tax, String startMonth, String endMonth){
        //按照金额以及数量联合查询
        /*List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getMinNumOfMaterial(material_category);
        String sql = "select ColumnZ Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,  MaterialCategory  from Material_View where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, ColumnZ having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01")    ;
        list =  getJdbcTemplate().queryForList(sql, new Object[]{material_category, startMonth , endMonth, num});
        if (list == null || list.size() == 0){
             sql = "select top 20 ColumnZ Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,  MaterialCategory  from Material_View where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, ColumnZ having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
             list =  getJdbcTemplate().queryForList(sql, new Object[]{material_category, startMonth , endMonth, 1});
        }
        
        if (list == null || list.size() == 0){
             sql = "select top 20 ColumnZ Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,  MaterialCategory  from Material_View where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, ColumnZ having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
             list =  getJdbcTemplate().queryForList(sql, new Object[]{material_category, startMonth , endMonth, 0});
        }*/
        
        //方案二 按照名次查询
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int num = Util.getRanking_DoneOfMaterial(material_category);
        String sql = "";
        int money = 1;
        if (material_category.equals("铝单板")){
            money = 250;
        }
        sql = "select top "+num+" ColumnZ Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,  MaterialCategory  from Material_View where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, ColumnZ having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
        startMonth = DateTransfer.getFirstday_Month(startMonth + "/01") ;
        endMonth =     DateTransfer.getLastDay_Month(endMonth + "/01");
        list =  getJdbcTemplate().queryForList(sql, new Object[]{material_category, startMonth , endMonth, money});
        if (list == null || list.size() == 0){
            sql = "select top "+num+" ColumnZ Supplier, SUM(Cast(Quantity as decimal(18,2))) SUM_Quantity, cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2))  SUM_TotalMoneyOTax,  MaterialCategory  from Material_View where  MaterialCategory = ?  and  Convert(datetime, intime ) BETWEEN ? AND ? GROUP BY MaterialCategory, ColumnZ having  cast(SUM(Cast(TotalMoneyOTax as decimal(18,2)))/10000 as   decimal(18,   2)) > ? ORDER BY SUM_TotalMoneyOTax DESC ";
            list =  getJdbcTemplate().queryForList(sql, new Object[]{material_category, startMonth , endMonth, 0});
        }
        
        return list;
    }
        
    public void testProcedure() { 
          List resultList = (List) getJdbcTemplate().execute( 
             new CallableStatementCreator() { 
                public CallableStatement createCallableStatement(Connection con) throws SQLException { 
                   String storedProc = "{call proc_get_user}";// 调用的sql 
                   CallableStatement cs = con.prepareCall(storedProc); 
                   return cs; 
                } 
             }, new CallableStatementCallback() { 
                public Object doInCallableStatement(CallableStatement cs) throws SQLException,DataAccessException { 
                   List resultsMap = new ArrayList(); 
                   cs.execute(); 
                   ResultSet rs = (ResultSet) cs.executeQuery();// 获取游标一行的值 
                   while (rs.next()) {// 转换每行的返回值到Map中 
                      Map rowMap = new HashMap(); 
                      rowMap.put("id", rs.getString("id")); 
                      rowMap.put("UserName", rs.getString("UserName")); 
                      resultsMap.add(rowMap); 
                   } 
                   rs.close(); 
                   return resultsMap; 
                } 
          }); 
          
          for (int i = 0; i < resultList.size(); i++) { 
             Map rowMap = (Map) resultList.get(i); 
             String id = rowMap.get("id").toString(); 
             String name = rowMap.get("UserName").toString(); 
             System.out.println("id=" + id + ";UserName=" + name); 
          } 
    } 
}
  

 

转载于:https://www.cnblogs.com/treasureNow/p/3449911.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值