package com.web.report.service.internal; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.data.domain.PageRequest; import org.springframework.jdbc.core.CallableStatementCallback; import org.springframework.jdbc.core.CallableStatementCreator; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.app.base.data.ApiResponseResult; import com.web.report.service.ReportPhaseTwoService; @Service(value = "ReportPhaseTwoService") @Transactional(propagation = Propagation.REQUIRED) public class ReportPhaseTwoImpl implements ReportPhaseTwoService { /** * Date:2022/9/14 * explain:为不影响原有的报表功能,另启一个类开发 * author:PL094 * **/ @Autowired private JdbcTemplate jdbcTemplate; //OCV数据报表 public ApiResponseResult getOCVList(String itemName,String modelNo, String beginTime, String endTime) throws Exception { List list = getOCVListPrc("PRC_OCV_TB_DATA", itemName,modelNo, beginTime, endTime); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } Map map = new LinkedHashMap(); map.put("TABLE_1", list.get(2));// 表格+折线图 map.put("TABLE_2", list.get(3));// 直方图 return ApiResponseResult.success().data(map); } //prcName:存储过程名称 //itemName:项目名 //modelNo:型号 //beginTime/endTime:开始/结束时间 public List getOCVListPrc(String prcName, String itemName,String modelNo,String beginTime, String endTime) throws Exception { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call " + prcName + "(?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, itemName); cs.setString(2, beginTime); cs.setString(3, endTime); cs.setString(4, modelNo); cs.registerOutParameter(5, java.sql.Types.INTEGER);// 输出参数 返回标识 cs.registerOutParameter(6, java.sql.Types.VARCHAR);// 输出参数 返回标识 cs.registerOutParameter(7, -10);// 输出参数 追溯数据 cs.registerOutParameter(8, -10);// 输出参数 追溯数据 return cs; } }, new CallableStatementCallback() { public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { List result = new ArrayList<>(); List> l = new ArrayList(); List> l_2 = new ArrayList(); cs.execute(); result.add(cs.getInt(5)); result.add(cs.getString(6)); if (cs.getString(5).toString().equals("0")) { // 游标处理 ResultSet rs = (ResultSet) cs.getObject(7); ResultSet rs_2 = (ResultSet) cs.getObject(8); try { l = fitMap(rs); l_2 = fitMap(rs_2); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } result.add(l); result.add(l_2); } System.out.println(l); System.out.println(l_2); return result; } }); return resultList; } private List> fitMap(ResultSet rs) throws Exception { List> list = new ArrayList<>(); if (null != rs) { Map map; int colNum = rs.getMetaData().getColumnCount(); List columnNames = new ArrayList(); for (int i = 1; i <= colNum; i++) { columnNames.add(rs.getMetaData().getColumnName(i)); } while (rs.next()) { map = new LinkedHashMap(); for (String columnName : columnNames) { map.put(columnName, rs.getString(columnName)); } list.add(map); } } return list; } }