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); } } }