package com.web.pda.gltPda_wdPda.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.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.web.pda.gltPda_wdPda.service.IODHSService; 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 com.app.base.data.ApiResponseResult; @Service(value = "IODHSService") @Transactional(propagation = Propagation.REQUIRED) public class IODHSlmpl implements IODHSService { @Autowired private JdbcTemplate jdbcTemplate; // 用于德和盛设备调用接口,获取MES数据 public ApiResponseResult getMesInfo(String barcode, int page, int size) throws Exception { List list = getMesInfoprc(barcode, page, size); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } // List> l_tmep = (List>) list.get(3); // Map m = l_tmep.get(0); // Map m_new = new LinkedHashMap();//使用LinkedHashMap会按顺序摆列 // m_new.put("CAPACITY", getNull(m.get("CAPACITY"))); // m_new.put("OCV1", getNull(m.get("OCV1"))); // m_new.put("OCV2", getNull(m.get("OCV2"))); // m_new.put("OCV3", getNull(m.get("OCV3"))); // m_new.put("OCR1", getNull(m.get("OCR1"))); // m_new.put("OCR2", getNull(m.get("OCR2"))); // m_new.put("OCR3", getNull(m.get("OCR3"))); // m_new.put("K12", getNull(m.get("K12"))); // m_new.put("K13", getNull(m.get("K13"))); // Map map = new HashMap(); // map.put("Sum", list.get(2)); // map.put("MesData", m_new); // return ApiResponseResult.success().data(map); Map map = new HashMap(); map.put("Sum", list.get(2)); map.put("MesData", list.get(3)); if(list.get(1) != null){ return ApiResponseResult.success(list.get(1).toString()).data(map); }else { return ApiResponseResult.failure("过程返回PO_TEXT字段值不能为空,请检查。"); } } private String getNull(Object o) { if (o == null) { return ""; } return o.toString(); } /** * 2021-05-08 用于德和盛设备调用接口,获取MES数据 **/ public List getMesInfoprc(String barcode, int page, int size) throws Exception { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call PRC_IO_DHS (?,?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, ""); cs.setString(2, ""); cs.setString(3, barcode); cs.setInt(4, page);// 每页记录 cs.setInt(5, size);// 当前页码 cs.registerOutParameter(6, java.sql.Types.INTEGER);// 输出参数 返回标识 cs.registerOutParameter(7, java.sql.Types.INTEGER);// 输出参数 返回标识 cs.registerOutParameter(8, java.sql.Types.VARCHAR);// 输出参数 返回标识 cs.registerOutParameter(9, -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(7)); result.add(cs.getString(8)); if (cs.getString(7).toString().equals("0")) { result.add(cs.getInt(6));// 总记录数 // 游标处理 ResultSet rs = (ResultSet) cs.getObject(9); 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 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; } }