You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
8.4 KiB
240 lines
8.4 KiB
package com.spring.ifs.utils;
|
|
|
|
import com.spring.ifs.data.IfsParamBean;
|
|
import ifs.fnd.ap.*;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* @description: IFS的通用方法
|
|
* @author LR
|
|
* @date 2024/12/9 11:18
|
|
* @version 1.0
|
|
*/
|
|
public class IfsPlsqlUtils {
|
|
|
|
/**
|
|
* @description: 调用查询的通用方法-- 返回单个Bean
|
|
* @author LR
|
|
* @date 2024/12/9 11:21
|
|
* @version 1.0
|
|
*/
|
|
public static Record execSqlSearchGetRecord(Server srv, StringBuilder searchSql, Map<String, String> inParam) throws APException {
|
|
//创建查询体
|
|
PlsqlSelectCommand selCmd = new PlsqlSelectCommand(srv, searchSql.toString());
|
|
//获取绑定参数
|
|
Record bindVars = selCmd.getBindVariables();
|
|
//循环设置入参
|
|
for(Map.Entry<String, String> entry : inParam.entrySet()) {
|
|
String key = entry.getKey();
|
|
String value = entry.getValue();
|
|
//设置入参
|
|
bindVars.add(key, value).setBindVariableDirection(BindVariableDirection.IN);
|
|
}
|
|
//执行查询
|
|
RecordCollection result = selCmd.executeQuery();
|
|
//判断是否查询到数据
|
|
if (null == result || result.size() == 0){
|
|
return null;
|
|
}else {
|
|
return result.get(0);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @description: 执行参数返回 集合参数
|
|
* @author LR
|
|
* @date 2024/12/9 11:36
|
|
* @version 1.0
|
|
*/
|
|
public static RecordCollection execSqlSearchGetRecordCollection(Server srv, StringBuilder searchSql, Map<String, String> inParam) throws APException {
|
|
//创建查询体
|
|
PlsqlSelectCommand selCmd = new PlsqlSelectCommand(srv, searchSql.toString());
|
|
//获取绑定参数
|
|
Record bindVars = selCmd.getBindVariables();
|
|
//循环设置入参
|
|
for(Map.Entry<String, String> entry : inParam.entrySet()) {
|
|
String key = entry.getKey();
|
|
String value = entry.getValue();
|
|
//设置入参
|
|
bindVars.add(key, value).setBindVariableDirection(BindVariableDirection.IN);
|
|
}
|
|
//执行查询
|
|
RecordCollection result = selCmd.executeQuery();
|
|
//判断是否查询到数据
|
|
if (null == result || result.size() == 0){
|
|
return null;
|
|
}else {
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @description: 执行存储过程 返回需要的数据
|
|
* @author LR
|
|
* @date 2024/12/9 16:17
|
|
* @version 1.0
|
|
*/
|
|
public static Map<String, String> execProcedureGetRecord(Server srv, String packageName, String methodName,
|
|
PlsqlBaseMethodType methodType, PlsqlBaseMethodAction methodAction, Map<String, String> inParam) throws APException {
|
|
//创建查询体
|
|
Record profile = new Record("PROFILE");
|
|
//填充参数
|
|
//循环设置入参
|
|
for(Map.Entry<String, String> entry : inParam.entrySet()) {
|
|
String key = entry.getKey();
|
|
String value = entry.getValue();
|
|
//设置入参
|
|
profile.add(key, value);
|
|
}
|
|
//创建执行的框体
|
|
PlsqlBaseMethodCommand methodCommand = new PlsqlBaseMethodCommand(
|
|
srv,
|
|
methodType,
|
|
packageName,
|
|
methodName,
|
|
profile,
|
|
methodAction);
|
|
//转换类型
|
|
Map<String, String> resultMap = null;
|
|
//执行
|
|
try{
|
|
methodCommand.execute();
|
|
resultMap = IfsConverterToMap.ConverterIfsToMap(profile);
|
|
}catch(ManualDecisionException e){
|
|
//转换类型
|
|
resultMap = IfsConverterToMap.ConverterIfsToMap(profile);
|
|
System.out.print(e.getMessage());
|
|
//填充警告信息
|
|
resultMap.put("WARNING", e.getMessage());
|
|
}
|
|
|
|
//返回结果集
|
|
return resultMap;
|
|
}
|
|
|
|
/**
|
|
* @description: 执行存储过程 返回需要的数据
|
|
* @author LR
|
|
* @date 2024/12/9 16:17
|
|
* @version 1.0
|
|
*/
|
|
public static Map<String, String> execProcedureGetRecordForParamType(Server srv, String packageName, String methodName,
|
|
PlsqlBaseMethodType methodType, PlsqlBaseMethodAction methodAction, Map<String, Object> inParam) throws APException {
|
|
//创建查询体
|
|
Record profile = new Record("PROFILE");
|
|
//填充参数
|
|
//循环设置入参
|
|
for(Map.Entry<String, Object> entry : inParam.entrySet()) {
|
|
String key = entry.getKey();
|
|
Object value = entry.getValue();
|
|
//设置入参
|
|
//区分不同类型 使用不同的添加入参方法
|
|
if (value instanceof String){
|
|
profile.add(key, (String)value, DataType.ALPHA);
|
|
}else if (value instanceof BigDecimal){
|
|
profile.add(key, (BigDecimal)value, DataType.DECIMAL);
|
|
}else if (value instanceof Integer){
|
|
profile.add(key, (Integer)value, DataType.INTEGER);
|
|
}else if (value instanceof Long){
|
|
profile.add(key, (Long)value, DataType.INTEGER);
|
|
}else if (value instanceof Double){
|
|
profile.add(key, (Double)value, DataType.FLOAT);
|
|
}else if (value instanceof Float){
|
|
profile.add(key, (Float)value, DataType.FLOAT);
|
|
}else if (value instanceof Boolean) {
|
|
profile.add(key, (Boolean) value, DataType.BOOLEAN);
|
|
}
|
|
}
|
|
//创建执行的框体
|
|
PlsqlBaseMethodCommand methodCommand = new PlsqlBaseMethodCommand(
|
|
srv,
|
|
methodType,
|
|
packageName,
|
|
methodName,
|
|
profile,
|
|
methodAction);
|
|
//执行
|
|
methodCommand.execute();
|
|
//转换类型
|
|
Map<String, String> resultMap = IfsConverterToMap.ConverterIfsToMap(profile);
|
|
//返回结果集
|
|
return resultMap;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @Title: execProcedureGetRecord
|
|
* @Description: 调用特殊的存储过程 出参和入参严格规范后的数据 入参和出参 不重复的数据
|
|
* @author: LR
|
|
* @date 2024年12月10日 下午3:54:22
|
|
* @return: Map<String,String>
|
|
* @throws
|
|
*/
|
|
public static Map<String, String> execProcedureGetRecord(Server srv, String packageName, String methodName,
|
|
List<IfsParamBean> inParams, List<IfsParamBean> outParams) throws APException {
|
|
Map<String, String> resultMap = new HashMap<>();
|
|
//创建查询体
|
|
StringBuilder searchSql = new StringBuilder();
|
|
searchSql.append("BEGIN ifsapp.").append(packageName).append(".").append(methodName).append("(");
|
|
//首先循环写入出参
|
|
for(int i = 0; i < outParams.size(); i++) {
|
|
IfsParamBean param = outParams.get(i);
|
|
//判断一下是否有入参
|
|
if(inParams != null) {
|
|
searchSql.append(":").append(param.getColumnName()).append(", ");
|
|
}else {
|
|
searchSql.append(":").append(param.getColumnName());
|
|
//判断是否是最后一个参数
|
|
if(i < outParams.size() - 1) {
|
|
searchSql.append(", ");
|
|
}
|
|
}
|
|
|
|
}
|
|
//然后填充入参
|
|
for(int i = 0; i < inParams.size(); i++) {
|
|
IfsParamBean param = inParams.get(i);
|
|
searchSql.append(":").append(param.getColumnName());
|
|
//判断是否是最后一个参数
|
|
if(i < inParams.size() - 1) {
|
|
searchSql.append(", ");
|
|
}
|
|
|
|
}
|
|
//拼接最终的sql
|
|
searchSql.append("); END;");
|
|
//打印最终调用的sql语句
|
|
System.err.println(searchSql.toString());
|
|
PlsqlSelectCommand selCmd = new PlsqlSelectCommand(srv, searchSql.toString());
|
|
Record bindVars = selCmd.getBindVariables();
|
|
//循环设置入参
|
|
for(IfsParamBean param : inParams) {
|
|
bindVars.add(param.getColumnName(), param.getColumnValue()).setBindVariableDirection(BindVariableDirection.IN);
|
|
}
|
|
//循环设置出参
|
|
for(IfsParamBean param : outParams) {
|
|
bindVars.add(param.getColumnName()).setBindVariableDirection(BindVariableDirection.OUT);
|
|
}
|
|
//执行查询
|
|
selCmd.executeQuery();
|
|
//遍历返回结果集
|
|
for(IfsParamBean param : outParams) {
|
|
String columnName = param.getColumnName();
|
|
String columnValue = bindVars.find(param.getColumnName()).getString();
|
|
resultMap.put(columnName, columnValue);
|
|
}
|
|
|
|
//返回结果集
|
|
return resultMap;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|