package com.web.pda.lyt.lytPda.service.internal; import com.app.base.data.ApiResponseResult; import com.web.pda.lyt.lytPda.dao.DefectInputDao; import com.web.pda.lyt.lytPda.service.DefectInputService; 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 = "DefectInputService") @Transactional(propagation = Propagation.REQUIRED) public class DefectInputlmpl extends AppUtills implements DefectInputService { @Autowired private JdbcTemplate jdbcTemplate; @Autowired DefectInputDao defectInputDao; // 出现频率最高排序不良类型 @Override public ApiResponseResult getDefect(String factory, String company, String procLine) throws Exception { // return // ApiResponseResult.success().data(defectInputDao.getDefectList(procLine)); List list = getDataPrc(factory, company, "高频率不良", "", procLine, "", "", ""); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } return ApiResponseResult.success().data(list.get(2)); } // 其他不良类型选择(低频率) public ApiResponseResult getDefectOther(String factory, String company, String procLine) throws Exception { // return // ApiResponseResult.success().data(defectInputDao.getDefectOtherList()); List list = getDataPrc(factory, company, "低频率不良", "", procLine, "", "", ""); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } return ApiResponseResult.success().data(list.get(2)); } // 其他不良类型选择(低频率)-查询 public ApiResponseResult searchDefectOther(String factory, String company, String procLine, String keyword) throws Exception { // ApiResponseResult.success().data(defectInputDao.searchDefectOther(keyword)); List list = getDataPrc(factory, company, "低频率不良查询", "", procLine, keyword, "", ""); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } return ApiResponseResult.success().data(list.get(2)); } // 设备编码 public ApiResponseResult getDeviceCode() throws Exception { return ApiResponseResult.success().data(defectInputDao.getDeviceCodeList()); } // 选择工单 public ApiResponseResult getTaskNo(String factory, String company, String procLine, String keyword) throws Exception { // return // ApiResponseResult.success().data(defectInputDao.getTaskNoList(keyword)); List list = getDataPrc(factory, company, "工单号", "", procLine, keyword, "", ""); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } return ApiResponseResult.success().data(list.get(2)); } // 获取投入的不良明细 public ApiResponseResult getRecord(String factory, String company, String taskNo, String procLine, String devCode) throws Exception { // return // ApiResponseResult.success().data(defectInputDao.getRecordList(taskNo, // procLine)); List list = getDataPrc(factory, company, "不良明细", "", procLine, "", taskNo, devCode); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } return ApiResponseResult.success().data(list.get(2)); } // 获取工序线体 public ApiResponseResult getProcLine(String factory, String company, String userNo) throws Exception { // return // ApiResponseResult.success().data(defectInputDao.getProcLineList(keyword)); List list = getDataPrc(factory, company, "工序线体", userNo, "", "", "", ""); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } return ApiResponseResult.success().data(list.get(2)); } public ApiResponseResult getProcLineByUser(String factory, String company, String userNo) throws Exception { // return // ApiResponseResult.success().data(defectInputDao.findProcLineByUser(userNo)); List list = getDataPrc(factory, company, "工序线体", userNo, "", "", "", ""); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } return ApiResponseResult.success().data(list.get(2)); } // 获取各个项目的数据源 public List getDataPrc(String factory, String company, String ftype, String userNo, String procLine, String keyword, String taskNo, String devCode) throws Exception { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call sp_sc_app_defectcode_data(?,?,?,?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, factory); cs.setString(2, company); cs.setString(3, ftype);// 类型 cs.setString(4, userNo);// 用户 cs.setString(5, procLine);// 工序不良 cs.setString(6, keyword);// 查询条件 cs.setString(7, taskNo);// 工单号 cs.setString(8, devCode);// 设备 cs.registerOutParameter(9, java.sql.Types.INTEGER);// 输出参数 返回标识 cs.registerOutParameter(10, java.sql.Types.VARCHAR);// 输出参数 返回标识 cs.registerOutParameter(11, -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(9)); result.add(cs.getString(10)); if (cs.getString(9).toString().equals("0")) { // 游标处理 ResultSet rs = (ResultSet) cs.getObject(11); 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 setDefectData(String userNo, String taskNo, String procLine, String defCode, int num, int type, String devCode, String factory, String company) throws Exception { List list = setDefectDataPrc(userNo, taskNo, procLine, defCode, num, type, devCode, factory, company); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } return ApiResponseResult.success(list.get(1).toString()); } public List setDefectDataPrc(String userNo, String taskNo, String procLine, String defCode, int num, int type, String devCode, String factory, String company) throws Exception { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call PRC_PB_DEFECT_CODE(?,?,?,?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, userNo); cs.setString(2, taskNo); cs.setString(3, procLine); cs.setString(4, defCode); cs.setInt(5, num); cs.setInt(6, type); cs.setString(7, devCode); cs.setString(8, factory); cs.setString(9, company); cs.registerOutParameter(10, java.sql.Types.INTEGER);// 输出参数 返回标识 cs.registerOutParameter(11, 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(10)); result.add(cs.getString(11)); return result; } }); return resultList; } //获取不良列表及明细 public ApiResponseResult getBadList(String factory, String company, String keyword, String releaseNo, int size, int page) throws Exception { List list = getBadListPrc(factory, company, keyword, releaseNo, size, page); if (!list.get(0).toString().equals("0")) {// 存储过程调用失败 //判断返回游标 return ApiResponseResult.failure(list.get(1).toString()); } Map map = new HashMap(); map.put("MAIN", list.get(2)); map.put("SUB", list.get(3)); return ApiResponseResult.success().data(map); } public List getBadListPrc(String factory, String company, String keyword, String releaseNo, int size, int page)throws Exception { List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call sp_sc_app_defectcode_list(?,?,?,?,?,?,?,?,?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, factory); cs.setString(2, company); cs.setString(3, keyword); cs.setString(4, releaseNo); cs.setInt(5, size); cs.setInt(6, page); cs.registerOutParameter(7, java.sql.Types.INTEGER);// 输出参数 返回标识 cs.registerOutParameter(8, java.sql.Types.VARCHAR);// 输出参数 返回标识 cs.registerOutParameter(9, -10);// 输出参数 追溯数据 cs.registerOutParameter(10, -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(7)); result.add(cs.getString(8)); if (cs.getString(7).toString().equals("0")) { // 游标处理 ResultSet rs = (ResultSet) cs.getObject(9); ResultSet rs_2 = (ResultSet) cs.getObject(10); 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; } }