package com.web.pda.lyt.lytPda.service.internal; import com.app.base.data.ApiResponseResult; import com.web.pda.lyt.lytPda.service.CoatItemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; 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 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; @Service(value = "CoatItemService") @Transactional(propagation = Propagation.REQUIRED) public class CoatItemlmpl extends AppUtills implements CoatItemService { @Autowired private JdbcTemplate jdbcTemplate; /** * 获取主表数据 **/ public ApiResponseResult getMainTable(String factory, String company, String keyword, int page, int size) throws Exception { List list = getMainTablePrc(factory, company, keyword,page,size); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } return ApiResponseResult.success().data(list.get(2)); } public List getMainTablePrc(String factory, String company, String keyword, int page, int size) throws Exception { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call sp_pqc_app_tubu(?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, factory); cs.setString(2, company); cs.setString(3, keyword); cs.setInt(4, page); cs.setInt(5, size); cs.registerOutParameter(6, java.sql.Types.INTEGER);// 输出参数 返回标识 cs.registerOutParameter(7, java.sql.Types.VARCHAR);// 输出参数 返回标识 cs.registerOutParameter(8, -10);// 输出参数 追溯数据 return cs; } }, new CallableStatementCallback() { public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { List result = new ArrayList<>(); List> l = new ArrayList(); cs.execute(); result.add(cs.getInt(6)); result.add(cs.getString(7)); if (cs.getString(6).toString().equals("0")) { // 游标处理 ResultSet rs = (ResultSet) cs.getObject(8); try { l = fitMap(rs); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } result.add(l); } System.out.println(l); return result; } }); return resultList; } /** * 获取从表数据 **/ public ApiResponseResult getSubTable(String factory, String company, String mid) throws Exception { List list = getSubTablePrc(factory, company,mid); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } Map map = new HashMap(); map.put("MAIN_TABLE", list.get(2)); map.put("SUB_TABLE", list.get(3)); return ApiResponseResult.success().data(map); } public List getSubTablePrc(String factory, String company, String mid) throws Exception { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call sp_pqc_app_tubu_item(?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, factory); cs.setString(2, company); cs.setString(3, mid); cs.registerOutParameter(4, java.sql.Types.INTEGER);// 输出参数 返回标识 cs.registerOutParameter(5, java.sql.Types.VARCHAR);// 输出参数 返回标识 cs.registerOutParameter(6, -10);// 输出参数 追溯数据 cs.registerOutParameter(7, -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(4)); result.add(cs.getString(5)); if (cs.getString(4).toString().equals("0")) { // 游标处理 ResultSet rs = (ResultSet) cs.getObject(6); ResultSet rs2 = (ResultSet) cs.getObject(7); try { l = fitMap(rs); l_2 = fitMap(rs2); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } result.add(l); result.add(l_2); } System.out.println(l); return result; } }); return resultList; } /** * 修改从表数据 **/ public ApiResponseResult updateSubTable(String factory, String company, String did, String stValue,String lowValue,String upValue,String lowPercent,String upPercent, String flow, String fup,String lowCon,String upCon) throws Exception { List list = updateSubTablePrc(factory, company, did, stValue,lowValue,upValue, lowPercent,upPercent,flow,fup,lowCon,upCon); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } return ApiResponseResult.success(); } public List updateSubTablePrc(String factory, String company, String did, String stValue,String lowValue,String upValue,String lowPercent,String upPercent, String flow, String fup,String lowCon,String upCon) throws Exception { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call sp_pqc_app_tubu_update(?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, factory); cs.setString(2, company); cs.setString(3, did); cs.setString(4, stValue); cs.setString(5, lowValue); cs.setString(6, upValue); cs.setString(7, lowPercent); cs.setString(8, upPercent); cs.setString(9, flow); cs.setString(10, fup); cs.setString(11, lowCon); cs.setString(12, upCon); cs.registerOutParameter(13, java.sql.Types.INTEGER);// 输出参数 返回标识 cs.registerOutParameter(14, java.sql.Types.VARCHAR);// 输出参数 返回标识 return cs; } }, new CallableStatementCallback() { public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { List result = new ArrayList<>(); List> l = new ArrayList(); cs.execute(); result.add(cs.getInt(13)); result.add(cs.getString(14)); return result; } }); return resultList; } }