package UIB.JHY; import CoreFS.SA01.CoreIComponent; import CoreFS.SA06.CoreReturnObject; import UIB.COM.XmlSqlParsersFactory; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.commons.collections.CollectionUtils; import org.springframework.jdbc.support.rowset.SqlRowSet; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.encoding.XMLType; import java.net.URL; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; /** * @author meiguiping * @desc 按检验项目对原始数据查询 * @date 2014/3/27 */ public class JHY02 extends CoreIComponent { /** * qltyCD2 二级编码 即:拉力,冲击等区分 * qltyCD3 三级编码 即:伸长率,屈服强度,抗拉强度等 * smp_no 委托编号 */ public CoreReturnObject doQltyCdQuery(String smp_no, String specimen_no, String seq, String qltyCD2, String qltyCD3) throws Exception { //获取所有的检化验编码,如a,b,Lo,S等 CoreReturnObject cro = new CoreReturnObject(); String sqlOne = XmlSqlParsersFactory.getSql("JHY02.QLTY_QCM_SELECT"); cro = this.getDao("testDao").ExecutequeryForRowSet(sqlOne, new Object[]{smp_no, qltyCD3}); SqlRowSet srs = (SqlRowSet) cro.getResult(); //获取目的SQL String repSql = ",MAX(DECODE('{2}', T3.QLTY_OPE_CD , T3.QLTY_VAL , NULL)) \"{3}\""; String temp = ""; StringBuffer sBuffer = new StringBuffer(350); String qltyNm = ""; while (srs.next()) { if (srs.getString(1) == null) { continue; } temp = repSql.replaceFirst("[{]+[2]+[}]+", srs.getString(1)).replaceFirst("[{]+[3]+[}]+", srs.getString("QLTY_OPE_CFNM"));//检验项目 sBuffer.append(temp); } String sqlAim = XmlSqlParsersFactory .getSql("JHY02.QLTY_QCMVAL_SELECT") .replaceFirst("[{]+[1]+[}]+", sBuffer.toString()); cro = this.getDao("testDao").ExcuteQuery(sqlAim, new Object[]{smp_no, qltyCD2, qltyCD3, smp_no}); return cro; } /** * @param list 取样编号集合 * @return CoreFS.SA06.CoreReturnObject * @desc 发送试样检测值 * @date 2022/7/16 17:56 * @author Ljy */ public CoreReturnObject doSendQltyValue(ArrayList list) throws Exception { //String urlStr = "http://172.16.0.127:8089/Quality/WebService?wsdl"; //22.09.09 从新改了服务 String urlStr = "http://10.90.0.127:8089/Quality/WebService?wsdl"; CoreReturnObject cro = new CoreReturnObject(); if(CollectionUtils.isEmpty(list)) { cro.setResult("请选择要发送的取样信息!"); return cro; } if(list.size() != 2) { cro.setResult("请选择要发送的取样信息!"); return cro; } List specimen_noList = (List) list.get(0); String create_name = (String) list.get(1); if(CollectionUtils.isEmpty(specimen_noList)) { cro.setResult("请选择要发送的取样信息!"); return cro; } String ret = ""; String tar = ""; JSONArray array = new JSONArray(); for (String specimen_no : specimen_noList) { String sqlOne = XmlSqlParsersFactory.getSql("JHY02.QLTY_SEND_ITEM_VALUE_SELECT").replace("?", "'" + specimen_no + "'"); ResultSet rs = this.getDao("testDao").ExceuteQueryForResultSet(sqlOne, new Object[]{specimen_no}); JSONObject arrayjo = resultSetToJsonArry(rs, specimen_no, create_name); array.add(arrayjo); } if (array.size() <= 0) { cro.setResult("未查询到试样检测值!"); return cro; } Object[] values = new Object[1]; tar = array.toJSONString(); values[0] = tar; try { ret = webServiceAxisCase(urlStr, "http://dao.hnshituo.com/", "SetPHYResult", values); System.out.println("发送试样检测值返回数据---" + ret); JSONObject rtjo = JSONObject.parseObject(ret); if (rtjo.get("code") == null || Integer.parseInt(rtjo.get("code").toString()) != 200) { System.out.println("发送试样检测值失败!json:" + tar); cro.setResult(rtjo.get("message")); } else { //修改发送状态 for (String specimen_no : specimen_noList) { ComCallProc comCallProc = new ComCallProc(); ArrayList send_flag_list = new ArrayList(); send_flag_list.add("JHY02.UPDATE_SEND_FLAG"); send_flag_list.add(specimen_no); ComSave comSave = new ComSave(); comSave.doSimpleSave("testDao",send_flag_list); } cro.setResult("200"); } } catch (Exception e) { e.printStackTrace(); } return cro; } /** * 将resultset 转为json数组 * * @param rs * @return * @throws SQLException * @throws JSONException */ public static JSONObject resultSetToJsonArry(ResultSet rs, String specimen_no, String create_name) throws SQLException, JSONException { ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); JSONObject jo = new JSONObject(); JSONObject arrayjo = new JSONObject(); JSONArray ja = new JSONArray(); while (rs.next()) { JSONObject jsonObj = new JSONObject(); for (int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnLabel(i); String value = rs.getString(columnName); jsonObj.put(columnName, value); } jsonObj.put("CREATE_NAME", create_name); ja.add(jsonObj); } arrayjo.put("PHY", ja); arrayjo.put("SPECIMEN_NO", specimen_no); return arrayjo; // return array1; } /** * 调用webservice接口 * url:调用路径 * TargetSpaceName:命名空间名,可在浏览器输入接口地址查看 * serviceName:调用方法名 * keys Object[] 对象数组类型:方法参数名 * values Object[] 对象数组类型:参数值 */ public static String webServiceAxisCase(String url, String TargetSpaceName, String serviceName, Object[] values) throws Exception { if (values.length != 1) throw new IllegalArgumentException("接口方法参数与参数值不匹配!"); String result = ""; try { String endpoint = url; //直接引用远程的wsdl文件 Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL(endpoint)); //call.setOperationName(serviceName);//调用的方法名 当这种调用不到的时候,可以使用下面的,加入命名空间名 call.setOperationName(new QName(TargetSpaceName, serviceName));// 调用的方法名 加入命名空间名 for (int i = 0; i < values.length; i++) { //String key = (String) keys[i]; //方法参数 Object value = values[i]; //参数值 if (value == null) { call.addParameter("arg" + i, XMLType.XSD_STRING, ParameterMode.IN); } else if (value instanceof String) { call.addParameter("arg" + i, XMLType.XSD_STRING, ParameterMode.IN); } else if (value instanceof Integer) { call.addParameter("arg" + i, XMLType.XSD_INTEGER, ParameterMode.IN); } else if (value instanceof Boolean) { call.addParameter("arg" + i, XMLType.XSD_BOOLEAN, ParameterMode.IN); } } call.setReturnType(XMLType.XSD_STRING);// 设置返回类型 result = (String) call.invoke(values); // 给方法传递参数,并且调用方法 } catch (Exception e) { System.err.println(e.toString()); } return result; } }