package com.web.pda.gltPda_wdPda.service.internal; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import com.web.pda.gltPda_wdPda.service.OutPutService; import org.apache.commons.lang3.StringUtils; 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 = "outPutService") @Transactional(propagation = Propagation.REQUIRED) public class OutPutImpl implements OutPutService { @Autowired private JdbcTemplate jdbcTemplate; /** * 根据设备号获取信息 * @param deviceNo * @return * @throws Exception */ @Override @Transactional public ApiResponseResult afterDevice(String deviceNo) throws Exception { if(StringUtils.isEmpty(deviceNo)){ return ApiResponseResult.failure("设备号不能为空!"); } List resultList = this.doPrc(deviceNo,"prc_eq_getproc1"); System.out.println(resultList);//001[1011-11,{ZBK2014042103-2{ZBK2014042103-2,1,admin,20000, if(resultList.size() > 0){ String s = resultList.get(0).substring(0); String[] strs = s.split("\\["); if(strs.length<1){ return ApiResponseResult.failure("返回值的格式不正确!"+resultList); } //判断取值是否成功 String str = strs[0]; if(str.equals("002")){ return ApiResponseResult.failure(resultList+""); } //获取列表 if(strs.length <1 ){ return ApiResponseResult.failure("长度解析发生错误:"+resultList); } String[] list_strs = strs[1].split(",",-1); //封装数据 Map map = new HashMap<>(); if(list_strs.length > 4){ map.put("station", list_strs[0]); map.put("classes", list_strs[2]); map.put("code", list_strs[3]); map.put("tqry", list_strs[4]); map.put("pqry", list_strs[5]); List arr = new ArrayList<>(); String[] s1 = replaceNull(list_strs[1].split("\\{")); map.put("list", Arrays.asList(s1)); }else{ return ApiResponseResult.failure("返回参数格式不对:"+resultList); } return ApiResponseResult.success("获取数据成功!").data(map); } return ApiResponseResult.failure("没有数据!"); } /** * 根据设备号获取信息 * @param deviceNo * @return * @throws Exception */ @Override @Transactional public ApiResponseResult afterDeviceWinding(String deviceNo) throws Exception { if(StringUtils.isEmpty(deviceNo)){ return ApiResponseResult.failure("设备号不能为空!"); } List resultList = this.doPrc(deviceNo,"prc_eq_getproc"); System.out.println(resultList);//001[设备信息 , if(resultList.size() > 0){ String s = resultList.get(0).substring(0); String[] strs = s.split("\\["); if(strs.length<1){ return ApiResponseResult.failure("返回值的格式不正确!"+resultList); } //判断取值是否成功 String str = strs[0]; if(str.equals("002")){ return ApiResponseResult.failure(resultList+""); } //获取列表 if(strs.length <1 ){ return ApiResponseResult.failure("长度解析发生错误:"+resultList); } return ApiResponseResult.success("获取数据成功!"); } return ApiResponseResult.failure("没有数据!"); } private String[] replaceNull(String[] str){ //用StringBuffer来存放数组中的非空元素,用“;”分隔 StringBuffer sb = new StringBuffer(); for(int i=0; i resultList = this.doPrc(param,"Prc_Check_Gonghao"); System.out.println(resultList);// if(resultList.size() > 0){ String s = resultList.get(0).substring(0); String[] strs = s.split("\\["); if(strs.length<1){ return ApiResponseResult.failure("返回值的格式不正确!"+resultList); } //判断取值是否成功 String str = strs[0]; if(str.equals("002")){ return ApiResponseResult.failure(resultList+""); } return ApiResponseResult.success().data(strs[1]); } return null; } @Override public ApiResponseResult afterOrder(String param) throws Exception { // TODO Auto-generated method stub if(StringUtils.isEmpty(param)){ return ApiResponseResult.failure("单号不能为空!"); } List resultList = this.doPrc(param,"Prc_Col_Tl01"); System.out.println(resultList);// if(resultList.size() > 0){ String s = resultList.get(0).substring(0); String[] strs = s.split("\\["); if(strs.length<1){ return ApiResponseResult.failure("返回值的格式不正确!"+resultList); } //判断取值是否成功 String str = strs[0]; if(str.equals("002")){ return ApiResponseResult.failure(resultList+""); } return ApiResponseResult.success().data(Arrays.asList(strs[1].split(",",-1))); } return null; } /** * 根据设备号获取信息 * @param barcode * @return * @throws Exception */ @Override @Transactional public ApiResponseResult afterBarcoe(String barcode) throws Exception{ if(StringUtils.isEmpty(barcode)){ return ApiResponseResult.failure("物料号不能为空!"); } List resultList = this.doPrc(barcode,"Prc_Check_Maratb"); System.out.println(resultList); if(resultList.size() > 0){ String s = resultList.get(0).substring(0); String[] strs = s.split("\\["); if(strs.length<1){ return ApiResponseResult.failure("返回值的格式不正确!"+resultList); } //判断取值是否成功 String str = strs[0]; if(str.equals("002")){ return ApiResponseResult.failure(resultList+""); } return ApiResponseResult.success().data(Arrays.asList(strs[1].split(",",-1))); } return ApiResponseResult.failure("没有数据!"); } /** * 根据设备号获取信息(新) * 2022/12/14 lst add * @param barcode * @return * @throws Exception */ @Override @Transactional public ApiResponseResult afterBarcoe_01(String barcode) throws Exception{ if(StringUtils.isEmpty(barcode)){ return ApiResponseResult.failure("物料号不能为空!"); } List resultList = this.doPrc(barcode,"Prc_Check_Maratb_01"); System.out.println(resultList); if(resultList.size() > 0){ String s = resultList.get(0).substring(0); String[] strs = s.split("\\["); if(strs.length<1){ return ApiResponseResult.failure("返回值的格式不正确!"+resultList); } //判断取值是否成功 String str = strs[0]; if(str.equals("002")){ return ApiResponseResult.failure(resultList+""); } return ApiResponseResult.success().data(Arrays.asList(strs[1].split(",",-1))); } return ApiResponseResult.failure("没有数据!"); } /** * 根据工单获取信息 * @param param * @return * @throws Exception */ @Override @Transactional public ApiResponseResult afterQty(String param) throws Exception{ //模块名称[字段名[登录帐号[工位[工号[班次[工单号[批量[设备[物料[用量 //工单号[批量为空 if(StringUtils.isEmpty(param)){ return ApiResponseResult.failure("数量不能为空!"); } List resultList = this.doPrc(param,"prc_tubu_put"); System.out.println(resultList); if(resultList.size() > 0){ String s = resultList.get(0).substring(0); String[] strs = s.split("\\["); if(strs.length<1){ return ApiResponseResult.failure("返回值的格式不正确!"+resultList); } //判断取值是否成功 String str = strs[0]; if(str.equals("002")){ return ApiResponseResult.failure(resultList+""); } return ApiResponseResult.success().data(strs[1]); } return ApiResponseResult.failure("没有数据!"); } public List doPrc(String param,String prc_name){ List resultList = (List) jdbcTemplate.execute(new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { String storedProc = "{call "+prc_name+"(?,?)}";// 调用的sql CallableStatement cs = con.prepareCall(storedProc); cs.setString(1, param); cs.registerOutParameter(2,java.sql.Types.VARCHAR);// 注册输出参数 返回类型 return cs; } }, new CallableStatementCallback() { public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { List result = new ArrayList(); cs.execute(); result.add(cs.getString(2)); return result; } }); return resultList; } @Override public ApiResponseResult afterBarcoeZP(String barcode) throws Exception { // TODO Auto-generated method stub if(StringUtils.isEmpty(barcode)){ return ApiResponseResult.failure("物料号不能为空!"); } List resultList = this.doPrc(barcode,"Prc_Check_Marazp"); System.out.println(resultList); if(resultList.size() > 0){ String s = resultList.get(0).substring(0); String[] strs = s.split("\\["); if(strs.length<1){ return ApiResponseResult.failure("返回值的格式不正确!"+resultList); } //判断取值是否成功 String str = strs[0]; if(str.equals("002")){ return ApiResponseResult.failure(resultList+""); } return ApiResponseResult.success().data(Arrays.asList(strs[1].split(",",-1))); } return ApiResponseResult.failure("没有数据!"); } }