pioneer
2 years ago
commit
86ca01da27
25 changed files with 1068 additions and 0 deletions
@ -0,0 +1,6 @@
|
||||
# open-JSD-10757 |
||||
|
||||
JSD-10757 对接sap的rfc接口取数\ |
||||
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,25 @@
|
||||
var data = [] |
||||
|
||||
for (i = 0; i < len; i++) { |
||||
var factory = _g().getCellValue(0, 1, i + 4); |
||||
//获取B5的扩展值
|
||||
var wl = _g().getCellValue(0, 2, i + 4); |
||||
//获取C5的扩展值
|
||||
data.push({ |
||||
"MATNR": wl, |
||||
"WERKS": factory |
||||
}) |
||||
} |
||||
$.ajax({ |
||||
url: "/webroot/decision/url/sapApi", |
||||
type: "POST", |
||||
contentType: "application/json", |
||||
data: JSON.stringify(data), |
||||
dataType: "json", |
||||
success: function (e) { |
||||
alert("提交响应:" + e) |
||||
}, |
||||
error: function () { |
||||
alert("提交失败请联系技术支持查看日志") |
||||
} |
||||
}) |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,128 @@
|
||||
|
||||
apply plugin: 'java' |
||||
|
||||
|
||||
ext { |
||||
/** |
||||
* 项目中依赖的jar的路径 |
||||
* 1.如果依赖的jar需要打包到zip中,放置在lib根目录下 |
||||
* 2.如果依赖的jar仅仅是编译时需要,防止在lib下子目录下即可 |
||||
*/ |
||||
libPath = "$projectDir/../../webroot/WEB-INF/lib" |
||||
|
||||
/** |
||||
* 是否对插件的class进行加密保护,防止反编译 |
||||
*/ |
||||
guard = false |
||||
|
||||
def pluginInfo = getPluginInfo() |
||||
pluginPre = "fine-plugin" |
||||
pluginName = pluginInfo.id |
||||
pluginVersion = pluginInfo.version |
||||
|
||||
outputPath = "$projectDir/../../webroot/WEB-INF/plugins/plugin-" + pluginName + "-1.0/classes" |
||||
} |
||||
|
||||
group = 'com.fr.plugin' |
||||
version = '10.0' |
||||
sourceCompatibility = '8' |
||||
|
||||
sourceSets { |
||||
main { |
||||
java.outputDir = file(outputPath) |
||||
output.resourcesDir = file(outputPath) |
||||
} |
||||
} |
||||
|
||||
ant.importBuild("encrypt.xml") |
||||
//定义ant变量 |
||||
ant.projectDir = projectDir |
||||
ant.references["compile.classpath"] = ant.path { |
||||
fileset(dir: libPath, includes: '**/*.jar') |
||||
fileset(dir: ".",includes:"**/*.jar" ) |
||||
} |
||||
|
||||
classes.dependsOn('clean') |
||||
|
||||
task copyFiles(type: Copy,dependsOn: 'classes'){ |
||||
from outputPath |
||||
into "$projectDir/classes" |
||||
} |
||||
|
||||
task myCopy(type: Copy){ |
||||
from ("$projectDir/lib"){include "*.jar"} |
||||
from "$projectDir/plugin.xml" |
||||
into "$projectDir/../../webroot/WEB-INF/plugins/plugin-" + pluginName + "-1.0/" |
||||
|
||||
} |
||||
|
||||
task preJar(type:Copy,dependsOn: guard ? 'compile_encrypt_javas' : 'compile_plain_javas'){ |
||||
from "$projectDir/classes" |
||||
into "$projectDir/transform-classes" |
||||
include "**/*.*" |
||||
} |
||||
jar.dependsOn("preJar") |
||||
classes.dependsOn("myCopy") |
||||
|
||||
task makeJar(type: Jar,dependsOn: preJar){ |
||||
from fileTree(dir: "$projectDir/transform-classes") |
||||
baseName pluginPre |
||||
appendix pluginName |
||||
version pluginVersion |
||||
destinationDir = file("$buildDir/libs") |
||||
|
||||
doLast(){ |
||||
delete file("$projectDir/classes") |
||||
delete file("$projectDir/transform-classes") |
||||
} |
||||
} |
||||
task copyFile(type: Copy,dependsOn: ["makeJar"]){ |
||||
from "$buildDir/libs" |
||||
from("$projectDir/lib") { |
||||
include "*.jar" |
||||
} |
||||
from "$projectDir/plugin.xml" |
||||
into file("$buildDir/temp/plugin") |
||||
} |
||||
|
||||
task zip(type:Zip,dependsOn:["copyFile"]){ |
||||
from "$buildDir/temp/plugin" |
||||
destinationDir file("$buildDir/install") |
||||
baseName pluginPre |
||||
appendix pluginName |
||||
version pluginVersion |
||||
} |
||||
|
||||
//控制build时包含哪些文件,排除哪些文件 |
||||
processResources { |
||||
// exclude everything |
||||
// 用*.css没效果 |
||||
// exclude '**/*.css' |
||||
// except this file |
||||
// include 'xx.xml' |
||||
} |
||||
|
||||
/*读取plugin.xml中的version*/ |
||||
def getPluginInfo(){ |
||||
def xmlFile = file("plugin.xml") |
||||
if (!xmlFile.exists()) { |
||||
return ["id":"none", "version":"1.0.0"] |
||||
} |
||||
def plugin = new XmlParser().parse(xmlFile) |
||||
def version = plugin.version[0].text() |
||||
def id = plugin.id[0].text() |
||||
return ["id":id,"version":version] |
||||
} |
||||
|
||||
repositories { |
||||
mavenLocal() |
||||
maven { |
||||
url = uri('https://mvn.fanruan.com/repository/maven-public/') |
||||
} |
||||
} |
||||
|
||||
dependencies { |
||||
//使用本地jar |
||||
implementation fileTree(dir: 'lib', include: ['**/*.jar']) |
||||
implementation fileTree(dir: libPath, include: ['**/*.jar']) |
||||
} |
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<project> |
||||
<target name="compile_encrypt_javas" depends="copyFiles"> |
||||
<echo message="加密文件"/> |
||||
<echo message="${projectDir}"/> |
||||
<taskdef name="pretreatment" classname="com.fr.plugin.pack.PluginPretreatmentTask"> |
||||
<classpath refid="compile.classpath"/> |
||||
</taskdef> |
||||
<pretreatment baseDir="${projectDir}"/> |
||||
</target> |
||||
<target name="compile_plain_javas" depends="copyFiles"> |
||||
</target> |
||||
</project> |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<plugin> |
||||
<id>com.eco.plugin.zzl.sap.guanjia</id> |
||||
<name><![CDATA[冠捷_EK]]></name> |
||||
<active>yes</active> |
||||
<version>0.3.3</version> |
||||
<env-version>10.0</env-version> |
||||
<jartime>2021-02-10</jartime> |
||||
<vendor>fr.open</vendor> |
||||
<main-package>com.fr.plugin</main-package> |
||||
<!--用来记录这个任务的创建时间--> |
||||
<description><![CDATA[ |
||||
2022-7-28 20:20:02 JSD-10757插件初始化 |
||||
补增10904 |
||||
]]></description> |
||||
<!--任务ID: 10757--> |
||||
<create-day>2022-7-28 20:20:02</create-day> |
||||
<extra-decision> |
||||
<HttpHandlerProvider class="com.fr.plugin.http.GUANJIAHttpHandler"/> |
||||
<URLAliasProvider class="com.fr.plugin.http.GUANJIAUrlAliasProvider"/> |
||||
</extra-decision> |
||||
<lifecycle-monitor class="com.fr.plugin.GUANJIALifeCycleMonitor"/> |
||||
<function-recorder class="com.fr.plugin.FunctionRecoder"/> |
||||
</plugin> |
@ -0,0 +1,12 @@
|
||||
package com.fr.plugin; |
||||
|
||||
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||
import com.fr.plugin.transform.FunctionRecorder; |
||||
|
||||
@FunctionRecorder |
||||
public class FunctionRecoder { |
||||
@ExecuteFunctionRecord |
||||
public void exe(){ |
||||
System.out.println("插件功能埋点,虽然不会执行,除非上架应用"); |
||||
} |
||||
} |
@ -0,0 +1,94 @@
|
||||
package com.fr.plugin; |
||||
|
||||
import com.fr.config.*; |
||||
import com.fr.config.holder.Conf; |
||||
import com.fr.config.holder.factory.Holders; |
||||
|
||||
@Visualization(category = "冠捷_EK配置") |
||||
public class GUANJIAConfig extends DefaultConfiguration { |
||||
|
||||
private static volatile GUANJIAConfig config = null; |
||||
|
||||
public static GUANJIAConfig getInstance() { |
||||
if (config == null) { |
||||
config = ConfigContext.getConfigInstance(GUANJIAConfig.class); |
||||
} |
||||
return config; |
||||
} |
||||
|
||||
@Identifier(value = "sapIp", name = "sapIp", description = "描述", status = Status.SHOW, restart = true) |
||||
private Conf<String> sapIp = Holders.simple("xxx"); |
||||
@Identifier(value = "sysCode", name = "系统编号", description = "描述", status = Status.SHOW, restart = true) |
||||
private Conf<String> sysCode = Holders.simple("xx"); |
||||
@Identifier(value = "cusCode", name = "客户端编号", description = "描述", status = Status.SHOW, restart = true) |
||||
private Conf<String> cusCode = Holders.simple("xx"); |
||||
@Identifier(value = "userName", name = "用户名", description = "描述", status = Status.SHOW, restart = true) |
||||
private Conf<String> userName = Holders.simple("xx"); |
||||
@Identifier(value = "pwd", name = "密码", description = "描述", status = Status.SHOW, restart = true) |
||||
private Conf<String> pwd = Holders.simple("xxx"); |
||||
|
||||
public String getSapIp() { |
||||
return sapIp.get(); |
||||
} |
||||
|
||||
public void setSapIp(String sapIp) { |
||||
this.sapIp.set(sapIp); |
||||
} |
||||
|
||||
public String getSysCode() { |
||||
return sysCode.get(); |
||||
} |
||||
|
||||
public void setSysCode(String sysCode) { |
||||
this.sysCode.set(sysCode); |
||||
} |
||||
|
||||
public String getCusCode() { |
||||
return cusCode.get(); |
||||
} |
||||
|
||||
public void setCusCode(String cusCode) { |
||||
this.cusCode.set(cusCode); |
||||
} |
||||
|
||||
public String getUserName() { |
||||
return userName.get(); |
||||
} |
||||
|
||||
public void setUserName(String userName) { |
||||
this.userName.set(userName); |
||||
} |
||||
|
||||
public String getPwd() { |
||||
return pwd.get(); |
||||
} |
||||
|
||||
public void setPwd(String pwd) { |
||||
this.pwd.set(pwd); |
||||
} |
||||
|
||||
@Identifier(value = "apiUrl", name = "apiUrl", description = "描述", status = Status.HIDE) |
||||
private Conf<String> apiUrl = Holders.simple("http://172.20.0.1:8000/sap/zrestful_test?sap-client=150&RFC=ZRFC_OMP_DATAMASTER"); |
||||
|
||||
public String getApiUrl() { |
||||
return apiUrl.get(); |
||||
} |
||||
|
||||
public void setApiUrl(String apiUrl) { |
||||
this.apiUrl.set(apiUrl); |
||||
} |
||||
|
||||
@Override |
||||
public Object clone() throws CloneNotSupportedException { |
||||
GUANJIAConfig cloned = (GUANJIAConfig) super.clone(); |
||||
cloned.apiUrl = (Conf<String>) this.apiUrl.clone(); |
||||
cloned.pwd = (Conf<String>) this.pwd.clone(); |
||||
cloned.userName = (Conf<String>) this.userName.clone(); |
||||
cloned.cusCode = (Conf<String>) this.cusCode.clone(); |
||||
cloned.sysCode = (Conf<String>) this.sysCode.clone(); |
||||
cloned.sapIp = (Conf<String>) this.sapIp.clone(); |
||||
|
||||
return cloned; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,18 @@
|
||||
package com.fr.plugin; |
||||
|
||||
import com.fr.plugin.context.PluginContext; |
||||
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||
import com.fr.stable.fun.Authorize; |
||||
|
||||
@Authorize |
||||
public class GUANJIALifeCycleMonitor extends AbstractPluginLifecycleMonitor { |
||||
@Override |
||||
public void afterRun(PluginContext pluginContext) { |
||||
GUANJIAConfig.getInstance(); |
||||
} |
||||
|
||||
@Override |
||||
public void beforeStop(PluginContext pluginContext) { |
||||
|
||||
} |
||||
} |
@ -0,0 +1,16 @@
|
||||
package com.fr.plugin.http; |
||||
|
||||
import com.fr.decision.fun.HttpHandler; |
||||
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; |
||||
import com.fr.plugin.http.handler.*; |
||||
|
||||
public class GUANJIAHttpHandler extends AbstractHttpHandlerProvider { |
||||
HttpHandler[] actions = new HttpHandler[]{ |
||||
new ALLSapApi1Handler(), |
||||
}; |
||||
|
||||
@Override |
||||
public HttpHandler[] registerHandlers() { |
||||
return actions; |
||||
} |
||||
} |
@ -0,0 +1,14 @@
|
||||
package com.fr.plugin.http; |
||||
|
||||
import com.fr.decision.fun.impl.AbstractURLAliasProvider; |
||||
import com.fr.decision.webservice.url.alias.URLAlias; |
||||
import com.fr.decision.webservice.url.alias.URLAliasFactory; |
||||
|
||||
public class GUANJIAUrlAliasProvider extends AbstractURLAliasProvider { |
||||
@Override |
||||
public URLAlias[] registerAlias() { |
||||
return new URLAlias[]{ |
||||
URLAliasFactory.createPluginAlias("/sapApi", "/sapApi", true), |
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,245 @@
|
||||
package com.fr.plugin.http.handler; |
||||
|
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fr.decision.authority.data.User; |
||||
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||
import com.fr.decision.webservice.v10.user.UserService; |
||||
import com.fr.json.JSONArray; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.plugin.utils.ConnectSAPServer; |
||||
import com.fr.plugin.utils.DBUtils; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||
import com.fr.web.utils.WebUtils; |
||||
import com.sap.conn.jco.*; |
||||
|
||||
import javax.servlet.http.Cookie; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.BufferedReader; |
||||
|
||||
public class ALLSapApi1Handler extends BaseHttpHandler { |
||||
@Override |
||||
public RequestMethod getMethod() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public String getPath() { |
||||
return "/sapApi"; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isPublic() { |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||
String requestBody = getRequestBody(req); |
||||
LogKit.info("收到的JSON:{}", requestBody); |
||||
JSONArray array = new JSONArray(requestBody); |
||||
DBUtils dbUtils = new DBUtils(); |
||||
//check exist
|
||||
int resq = array.size(); |
||||
// JSONArray reqJSONArr = new JSONArray();
|
||||
// for (int i = 0; i < resq; i++) {
|
||||
// JSONObject jsonObject = array.getJSONObject(i);
|
||||
// String matnr = jsonObject.getString("MATNR");
|
||||
// boolean exist = dbUtils.checkExist("select count(1) c from TPV_OMP_MATERIAL_DATA where TPV_MODEL=?", matnr);
|
||||
// if (!exist) {
|
||||
// reqJSONArr.add(jsonObject);
|
||||
// }
|
||||
// }
|
||||
LogKit.info("发送到接口的JSON为:{}", array); |
||||
// GUANJIAConfig config = GUANJIAConfig.getInstance();
|
||||
// String apiUrl = config.getApiUrl();
|
||||
// String resp = HttpKit.postJSON(apiUrl, reqJSONArr, new HashMap<>());
|
||||
// LogKit.info("请求:{},响应:{}", apiUrl, resp);
|
||||
// JSONArray jsonArray = new JSONArray(resp);
|
||||
JSONObject retJSON = send2SAP(array); |
||||
JSONArray jsonArray = retJSON.getJSONArray("arr1"); |
||||
LogKit.info("SAP返回的为:{}", jsonArray); |
||||
String user ="admin"; |
||||
try { |
||||
User user1 = UserService.getInstance().getUserByRequestCookie(req); |
||||
user=user1.getUserName(); |
||||
}catch (Exception e){ |
||||
} |
||||
//更新TPV_OMP_MATERIAL_DATA表
|
||||
dbUtils.saveJSONArr(jsonArray, user ); |
||||
//更新状态表
|
||||
JSONArray arr2 = retJSON.getJSONArray("arr2"); |
||||
int size1 = arr2.size(); |
||||
for (int i = 0; i < size1; i++) { |
||||
JSONObject o = arr2.getJSONObject(i); |
||||
dbUtils.saveReJSON(o, user ); |
||||
} |
||||
WebUtils.printAsString(res, "入库成功"); |
||||
} |
||||
|
||||
|
||||
private JSONObject send2SAP(JSONArray inArr) throws JCoException { |
||||
JCoDestination jCoDestination = ConnectSAPServer.Connect(); |
||||
|
||||
JCoFunction function = jCoDestination.getRepository().getFunction("ZRFC_OMP_DATAMASTER"); |
||||
if (function == null) |
||||
throw new RuntimeException("Function not found in SAP."); |
||||
// JCoParameterList tableParameterList = function.getTableParameterList();
|
||||
JCoParameterList importParameterList = function.getImportParameterList(); |
||||
JCoTable input_tab = importParameterList.getTable("IT_INPUT"); |
||||
// JCoTable input_tab = tableParameterList.getTable("IT_INPUT");
|
||||
int size = inArr.size(); |
||||
for (int i = 0; i < size; i++) { |
||||
input_tab.appendRow(); |
||||
JSONObject jsonObject = inArr.getJSONObject(i); |
||||
input_tab.setValue("MATNR", jsonObject.getString("MATNR")); |
||||
input_tab.setValue("WERKS", jsonObject.getString("WERKS")); |
||||
} |
||||
function.execute(jCoDestination); |
||||
JCoTable returnTable = function.getTableParameterList().getTable("IT_OUTPUT"); |
||||
int numRows = returnTable.getNumRows(); |
||||
LogKit.info("接收到条数:{}", numRows); |
||||
JSONArray jsonArray = new JSONArray(); |
||||
if (numRows > 0) { |
||||
for (int i = 0; i < numRows; i++) { |
||||
JSONObject jsonObject = new JSONObject(); |
||||
for (JCoField jCoField : returnTable) { |
||||
LogKit.info("jcoFile:{} ,value:{}", jCoField.getName(), jCoField.getValue()); |
||||
} |
||||
jsonObject.put("MATNR", toString2(returnTable.getValue("MATNR"))); |
||||
jsonObject.put("BISMT",toString2( returnTable.getValue("BISMT"))); |
||||
jsonObject.put("MAKTX", toString2(returnTable.getValue("MAKTX"))); |
||||
jsonObject.put("BRGEW",toString2( returnTable.getValue("BRGEW"))); |
||||
jsonObject.put("BTGEW",toString2( returnTable.getValue("NTGEW"))); |
||||
jsonObject.put("VOLUM",toString2( returnTable.getValue("VOLUM"))); |
||||
jsonObject.put("SPART",toString2( returnTable.getValue("SPART"))); |
||||
jsonObject.put("MATKL",toString2( returnTable.getValue("MATKL"))); |
||||
jsonObject.put("MEINS",toString2( returnTable.getValue("MEINS"))); |
||||
jsonObject.put("NORMT",toString2( returnTable.getValue("NORMT"))); |
||||
jsonObject.put("FERTH",toString2( returnTable.getValue("FERTH"))); |
||||
jsonObject.put("Z_BRDTYPE", toString2(returnTable.getValue("Z_BRDTYPE"))); |
||||
jsonObject.put("Z_BRDID",toString2( returnTable.getValue("Z_BRDID"))); |
||||
jsonObject.put("Z_REGION", toString2(returnTable.getValue("Z_REGION"))); |
||||
jsonObject.put("Z_CMNFTYPE",toString2( returnTable.getValue("Z_CMNFTYPE"))); |
||||
jsonObject.put("Z_PRDLINE",toString2( returnTable.getValue("Z_PRDLINE"))); |
||||
jsonObject.put("Z_STYLEID",toString2( returnTable.getValue("Z_STYLEID"))); |
||||
jsonObject.put("Z_SRCTYPE",toString2( returnTable.getValue("Z_SRCTYPE"))); |
||||
jsonObject.put("Z_ASSM",toString2( returnTable.getValue("Z_ASSM"))); |
||||
jsonObject.put("Z_WPNL",toString2( returnTable.getValue("Z_WPNL"))); |
||||
jsonObject.put("Z_SIZE", toString2(returnTable.getValue("Z_SIZE"))); |
||||
jsonObject.put("Z_RATIO", toString2(returnTable.getValue("Z_RATIO"))); |
||||
jsonObject.put("Z_PNLLIGHT",toString2( returnTable.getValue("Z_PNLLIGHT"))); |
||||
jsonObject.put("Z_PNLSUPTYPE", toString2(returnTable.getValue("Z_PNLSUPTYPE"))); |
||||
jsonObject.put("Z_PNLBRDID",toString2( returnTable.getValue("Z_PNLBRDID"))); |
||||
jsonObject.put("Z_FUNTYPE", toString2(returnTable.getValue("Z_FUNTYPE"))); |
||||
jsonObject.put("Z_SGNTYPE", toString2(returnTable.getValue("Z_SGNTYPE"))); |
||||
jsonObject.put("Z_CUSTNAME",toString2( returnTable.getValue("Z_CUSTNAME"))); |
||||
jsonObject.put("Z_PARSE", toString2(returnTable.getValue("Z_PARSE"))); |
||||
jsonObject.put("Z_BG", toString2(returnTable.getValue("Z_BG"))); |
||||
jsonObject.put("Z_SMARTTV", toString2(returnTable.getValue("Z_SMARTTV"))); |
||||
jsonObject.put("Z_DOBLY", toString2(returnTable.getValue("Z_DOBLY"))); |
||||
jsonObject.put("GEBSQ", toString2(returnTable.getValue("GEBSQ"))); |
||||
jsonObject.put("HSCODE",toString2( returnTable.getValue("HSCODE"))); |
||||
jsonObject.put("CMODEL", toString2(returnTable.getValue("CMODEL"))); |
||||
jsonObject.put("MATNR_LCM", toString2(returnTable.getValue("MATNR_LCM"))); |
||||
jsonObject.put("MAKTX_LCM", toString2(returnTable.getValue("MAKTX_LCM"))); |
||||
jsonArray.add(jsonObject); |
||||
returnTable.nextRow(); |
||||
} |
||||
} |
||||
|
||||
JCoTable extable = function.getTableParameterList().getTable("ET_RETURN"); |
||||
int exCount = extable.getNumRows(); |
||||
LogKit.info("接收到extable 条数:{}", exCount); |
||||
JSONArray jsonexArray = new JSONArray(); |
||||
if (exCount > 0) { |
||||
for (int i = 0; i < exCount; i++) { |
||||
JSONObject jsonObject = new JSONObject(); |
||||
for (JCoField jCoField : extable) { |
||||
LogKit.info("jcoFile:{} ,value:{}", jCoField.getName(), jCoField.getValue()); |
||||
// jsonObject.put(jCoField.getName(), jCoField.getString());
|
||||
} |
||||
jsonObject.put("MATNR", toString2(extable.getValue("MATNR"))); |
||||
jsonObject.put("WERKS", toString2(extable.getValue("WERKS"))); |
||||
jsonObject.put("RETURN", toString2(extable.getValue("RETURN"))); |
||||
jsonexArray.add(jsonObject); |
||||
extable.nextRow(); |
||||
} |
||||
} |
||||
JSONObject returnObj = new JSONObject(); |
||||
returnObj.put("arr1", jsonArray); |
||||
returnObj.put("arr2", jsonexArray); |
||||
LogKit.info("两个表数据:{}",returnObj); |
||||
return returnObj; |
||||
} |
||||
|
||||
private String toString2(Object obj) { |
||||
if (obj != null) { |
||||
return obj.toString(); |
||||
} |
||||
return ""; |
||||
} |
||||
|
||||
public static String getRequestBody(HttpServletRequest req) { |
||||
StringBuffer sb = new StringBuffer(); |
||||
String line = null; |
||||
try { |
||||
BufferedReader reader = req.getReader(); |
||||
while ((line = reader.readLine()) != null) |
||||
sb.append(line); |
||||
} catch (Exception e) { |
||||
} |
||||
|
||||
return sb.toString(); |
||||
} |
||||
|
||||
/** |
||||
* 根据key获取cookie |
||||
* |
||||
* @param req |
||||
* @return |
||||
*/ |
||||
public static String getCookieByKey(HttpServletRequest req, String key) { |
||||
Cookie[] cookies = req.getCookies(); |
||||
String cookie = ""; |
||||
|
||||
if (cookies == null || cookies.length <= 0) { |
||||
return ""; |
||||
} |
||||
|
||||
for (int i = 0; i < cookies.length; i++) { |
||||
Cookie item = cookies[i]; |
||||
if (item.getName().equalsIgnoreCase(key)) { |
||||
cookie = item.getValue(); |
||||
} |
||||
} |
||||
|
||||
LogKit.info("cookie:" + cookie); |
||||
|
||||
return cookie; |
||||
} |
||||
|
||||
private String deleteCookieByName(HttpServletRequest request, HttpServletResponse response, String name) { |
||||
Cookie[] cookies = request.getCookies(); |
||||
if (null == cookies) { |
||||
FineLoggerFactory.getLogger().debug("没有cookie"); |
||||
} else { |
||||
for (Cookie cookie : cookies) { |
||||
if (cookie.getName().equals(name)) { |
||||
String cookieValue = cookie.getValue(); |
||||
//设置值为null
|
||||
cookie.setValue(null); |
||||
//立即销毁cookie
|
||||
cookie.setMaxAge(0); |
||||
cookie.setPath("/"); |
||||
FineLoggerFactory.getLogger().debug("被删除的cookie名字为:{}", cookie.getName(), cookieValue); |
||||
response.addCookie(cookie); |
||||
return cookieValue; |
||||
} |
||||
} |
||||
} |
||||
return ""; |
||||
} |
||||
} |
@ -0,0 +1,68 @@
|
||||
package com.fr.plugin.utils; |
||||
|
||||
|
||||
import java.io.File; |
||||
import java.io.FileOutputStream; |
||||
import java.util.Properties; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fr.plugin.GUANJIAConfig; |
||||
import com.sap.conn.jco.JCoDestination; |
||||
import com.sap.conn.jco.JCoDestinationManager; |
||||
import com.sap.conn.jco.JCoException; |
||||
import com.sap.conn.jco.ext.DestinationDataProvider; |
||||
|
||||
public class ConnectSAPServer { |
||||
static String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL"; |
||||
|
||||
static { |
||||
Properties connectProperties = new Properties(); |
||||
GUANJIAConfig config = GUANJIAConfig.getInstance(); |
||||
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, |
||||
config.getSapIp()); |
||||
LogKit.info("SAP接口地址:{}", config.getSapIp()); |
||||
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, config.getSysCode()); |
||||
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "01"); |
||||
|
||||
connectProperties |
||||
.setProperty(DestinationDataProvider.JCO_CLIENT, config.getCusCode()); |
||||
LogKit.info("SAPCUSCODE:{}", config.getCusCode()); |
||||
connectProperties.setProperty(DestinationDataProvider.JCO_USER, |
||||
config.getUserName()); |
||||
LogKit.info("SAP用户名:{}", config.getUserName()); |
||||
|
||||
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, |
||||
config.getPwd()); |
||||
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, |
||||
config.getPwd()); |
||||
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "EN"); |
||||
connectProperties.setProperty( |
||||
DestinationDataProvider.JCO_POOL_CAPACITY, "10"); |
||||
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, |
||||
"10"); |
||||
createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties); |
||||
} |
||||
|
||||
static void createDataFile(String name, String suffix, Properties properties) { |
||||
File cfg = new File(name + "." + suffix); |
||||
try { |
||||
FileOutputStream fos = new FileOutputStream(cfg, false); |
||||
properties.store(fos, "SAP连接配置文件"); |
||||
fos.close(); |
||||
} catch (Exception e) { |
||||
throw new RuntimeException( |
||||
"Unable to create the destination file " |
||||
+ cfg.getName(), e); |
||||
} |
||||
} |
||||
|
||||
public static JCoDestination Connect() { |
||||
JCoDestination destination = null; |
||||
try { |
||||
destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED); |
||||
} catch (JCoException e) { |
||||
LogKit.error("链接数据库:", e); |
||||
} |
||||
return destination; |
||||
} |
||||
} |
@ -0,0 +1,380 @@
|
||||
package com.fr.plugin.utils; |
||||
|
||||
import com.fanruan.api.data.ConnectionKit; |
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fr.json.JSONArray; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.log.FineLoggerProvider; |
||||
|
||||
import java.sql.Date; |
||||
import java.sql.*; |
||||
import java.util.*; |
||||
|
||||
public class DBUtils { |
||||
String db_name = ""; |
||||
|
||||
private static FineLoggerProvider logger = FineLoggerFactory.getLogger(); |
||||
|
||||
public DBUtils() { |
||||
this.db_name = "finebi"; |
||||
} |
||||
|
||||
public com.fr.data.impl.Connection getDbConnect() { |
||||
return ConnectionKit.getConnection(db_name); |
||||
} |
||||
|
||||
public List<Map<String, Object>> select(String sql, Object... params) { |
||||
logger.info("query data by sql:" + sql + Arrays.toString(params)); |
||||
try { |
||||
com.fr.data.impl.Connection dbConnect = getDbConnect(); |
||||
Connection con = dbConnect.createConnection(); |
||||
PreparedStatement preparedStatement = con.prepareStatement(sql); |
||||
setParams(preparedStatement, params); |
||||
ResultSet rs = preparedStatement.executeQuery(sql); |
||||
// 获得记录的详细信息,然后获得总列数
|
||||
ResultSetMetaData resMetaData = rs.getMetaData(); |
||||
int colNum = resMetaData.getColumnCount(); |
||||
// 用对象保存数据
|
||||
String name = ""; |
||||
String value = ""; |
||||
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); |
||||
while (rs.next()) { |
||||
Map<String, Object> cells = new HashMap<String, Object>(); |
||||
for (int i = 0; i < colNum; i++) { |
||||
name = resMetaData.getColumnLabel(i); |
||||
if (cells.get(name) != null) { |
||||
name = resMetaData.getColumnLabel(i); |
||||
} |
||||
if (rs.getObject(i) != null && resMetaData.getColumnTypeName(i).equals("DATETIME") || resMetaData.getColumnTypeName(i).equals("TIMESTAMP")) { |
||||
value = rs.getObject(i).toString(); |
||||
cells.put(name, value.substring(0, value.length() - 2)); |
||||
} else { |
||||
cells.put(name, rs.getString(i)); |
||||
} |
||||
} |
||||
list.add(cells); |
||||
} |
||||
// 释放数据库资源
|
||||
rs.close(); |
||||
preparedStatement.close(); |
||||
con.close(); |
||||
return list; |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
public int exec(String sql, String date) throws Exception { |
||||
logger.info("query data by sql:{} 时间:{}", sql, date); |
||||
Connection con = null; |
||||
CallableStatement call = null; |
||||
try { |
||||
com.fr.data.impl.Connection dbConnect = getDbConnect(); |
||||
con = dbConnect.createConnection(); |
||||
call = con.prepareCall(sql); |
||||
call.registerOutParameter(1, Types.INTEGER); |
||||
call.execute(); |
||||
Integer ret = call.getInt(1); |
||||
return ret; |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
throw e; |
||||
} finally { |
||||
if (call != null) { |
||||
call.close(); |
||||
} |
||||
if (con != null) { |
||||
con.close(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public Map<String, Object> findOneRow(String sql, Object... params) { |
||||
List<Map<String, Object>> select = select(sql, params); |
||||
if (select != null) { |
||||
if (!select.isEmpty()) { |
||||
return select.get(0); |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
public boolean checkExist(String sql, Object... params) throws Exception { |
||||
Connection connection = getDbConnect().createConnection(); |
||||
PreparedStatement pstmt = connection.prepareStatement(sql); |
||||
setParams(pstmt, params); |
||||
try { |
||||
ResultSet resultSet = pstmt.executeQuery(); |
||||
if (resultSet.next()) { |
||||
return resultSet.getInt(1) > 0; |
||||
} |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} finally { |
||||
connection.close(); |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
|
||||
private void setParams(PreparedStatement pstmt, Object... params) throws SQLException { |
||||
if (params.length > 0) { |
||||
int length = params.length; |
||||
for (int i = 1; i <= length; i++) { |
||||
pstmt.setObject(i, params[i - 1]); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public int exSqlUpdate(String sql, Object... params) throws Exception { |
||||
logger.info("update data by sql:" + sql + " params " + Arrays.toString(params)); |
||||
PreparedStatement pstmt = null; |
||||
Connection connection = null; |
||||
try { |
||||
com.fr.data.impl.Connection dbConnect = getDbConnect(); |
||||
connection = dbConnect.createConnection(); |
||||
pstmt = connection.prepareStatement(sql); |
||||
setParams(pstmt, params); |
||||
int i = pstmt.executeUpdate(); |
||||
return i; |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error("执行更新SQL报错: sql:{}", e, sql); |
||||
} finally { |
||||
if (pstmt != null) { |
||||
pstmt.close(); |
||||
} |
||||
if (connection != null) { |
||||
connection.close(); |
||||
} |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
/** |
||||
* 取查询结果集字段 |
||||
* |
||||
* @param sql |
||||
* @param params |
||||
* @return |
||||
* @throws Exception |
||||
*/ |
||||
public List<Map<String, String>> exQuery(String sql, Object... params) throws Exception { |
||||
logger.info("query data by sql:" + sql + " params " + Arrays.toString(params)); |
||||
com.fr.data.impl.Connection dbConnect = getDbConnect(); |
||||
Connection connection = dbConnect.createConnection(); |
||||
PreparedStatement pstmt = connection.prepareStatement(sql); |
||||
setParams(pstmt, params); |
||||
ResultSet resultSet = pstmt.executeQuery(); |
||||
ResultSetMetaData resMetaData = resultSet.getMetaData(); |
||||
int columnCount = resMetaData.getColumnCount(); |
||||
List<Map<String, String>> arrs = new ArrayList<Map<String, String>>(); |
||||
while (resultSet.next()) { |
||||
String name; |
||||
String value; |
||||
Map<String, String> one = new HashMap<String, String>(); |
||||
for (int i = 1; i <= columnCount; i++) { |
||||
name = resMetaData.getColumnLabel(i); |
||||
if (one.get(name) != null) { |
||||
name = resMetaData.getColumnLabel(i); |
||||
} |
||||
if (resultSet.getObject(i) != null && resMetaData.getColumnTypeName(i).equals("DATETIME") || resMetaData.getColumnTypeName(i).equals("TIMESTAMP")) { |
||||
value = resultSet.getObject(i).toString(); |
||||
one.put(name, value.substring(0, value.length() - 2)); |
||||
} else { |
||||
one.put(name, resultSet.getString(i)); |
||||
} |
||||
} |
||||
arrs.add(one); |
||||
} |
||||
pstmt.close(); |
||||
connection.close(); |
||||
return arrs; |
||||
} |
||||
|
||||
private static final String sqlJSON = "insert into TPV_OMP_MATERIAL_DATA ( " + |
||||
"TPV_MODEL, " + |
||||
"SAFETY_MODEL,\n" + |
||||
"MATERIAL_DESC,\n" + |
||||
"GROSS_WEIGHT,\n" + |
||||
"NET_WEIGHT,\n" + |
||||
"VOLUME,\n" + |
||||
"PRODUCT_GROUP,\n" + |
||||
"MATERIAL_GROUP,\n" + |
||||
"BASE_METER_UNIT,\n" + |
||||
"CABINET_QTY,\n" + |
||||
"CUSTOMER_MODEL,\n" + |
||||
"BG,\n" + |
||||
"BRAND,\n" + |
||||
"SALES_REGION,\n" + |
||||
"OEM_MODE,\n" + |
||||
"PRODUCT_SERIES,\n" + |
||||
"PRODUCT_SERIES_CODE,\n" + |
||||
"GET_MODE,\n" + |
||||
"SHIPMENT_CATEGORY,\n" + |
||||
"WITHOUT_PANEL,\n" + |
||||
"SIZE,\n" + |
||||
"APPEARANCE_RATIO,\n" + |
||||
"BACKLIGHT_TYPE,\n" + |
||||
"PANEL_SUPPLY,\n" + |
||||
"PANEL_MAKER,\n" + |
||||
"FUNCTION_CATEGORY,\n" + |
||||
"SIGNAL_CLASS,\n" + |
||||
"CUSTOMER_NAME,\n" + |
||||
"RESOLUTION,\n" + |
||||
"SUB_BG,\n" + |
||||
"SMART_TV,\n" + |
||||
"DOBLY,\n" + |
||||
"CUSTOMERS_CLASS_CODE,\n" + |
||||
"COMMODITY_CODE,\n" + |
||||
"DECLARATION_ELEMENT,\n" + |
||||
"LCM_MODEL,\n" + |
||||
"LCM_MODEL_DESC,\n" + |
||||
"USER_NAME,\n" + |
||||
"CREATE_TIME) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; |
||||
|
||||
|
||||
public void saveJSONArr(JSONArray jsonArray, String userName) throws SQLException { |
||||
com.fr.data.impl.Connection dbConnect = getDbConnect(); |
||||
Connection con = null; |
||||
try { |
||||
con = dbConnect.createConnection(); |
||||
con.setAutoCommit(false); |
||||
int size = jsonArray.size(); |
||||
for (int i = 0; i < size; i++) { |
||||
JSONObject o = jsonArray.getJSONObject(i); |
||||
deleteByJSON(o,con); |
||||
saveJSON(o, userName, con); |
||||
} |
||||
con.commit(); |
||||
} catch (Exception e) { |
||||
LogKit.error("SQL 异常 :",e); |
||||
try { |
||||
if (con != null) { |
||||
con.rollback(); |
||||
} |
||||
}catch (Exception e12){ |
||||
} |
||||
|
||||
} finally { |
||||
if (con != null) { |
||||
try { |
||||
con.close(); |
||||
}catch (Exception e){ |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
String deleteJSONSQL = "delete from TPV_OMP_MATERIAL_DATA where TPV_MODEL=?"; |
||||
private Integer deleteByJSON(JSONObject o, Connection con) throws SQLException { |
||||
logger.info("update data by sql:" + deleteJSONSQL + " params " + o); |
||||
PreparedStatement pstmt = null; |
||||
try { |
||||
pstmt = con.prepareStatement(deleteJSONSQL); |
||||
pstmt.setString(1, o.getString("MATNR")); |
||||
int i = pstmt.executeUpdate(); |
||||
return i; |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error("执行更新SQL报错: sql:{}", e, sqlJSON); |
||||
} finally { |
||||
try { |
||||
if (pstmt != null) { |
||||
pstmt.close(); |
||||
} |
||||
}catch (Exception e){ |
||||
} |
||||
|
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
public int saveJSON(JSONObject o, String userName, Connection connection) throws SQLException { |
||||
logger.info("update data by sql:" + sqlJSON + " params " + o); |
||||
PreparedStatement pstmt = null; |
||||
try { |
||||
pstmt = connection.prepareStatement(sqlJSON); |
||||
pstmt.setString(1, o.getString("MATNR")); |
||||
pstmt.setString(2, o.getString("BISMT")); |
||||
pstmt.setString(3, o.getString("MAKTX")); |
||||
pstmt.setString(4, o.getString("BRGEW")); |
||||
pstmt.setString(5, o.getString("BTGEW")); |
||||
pstmt.setString(6, o.getString("VOLUM")); |
||||
pstmt.setString(7, o.getString("SPART")); |
||||
pstmt.setString(8, o.getString("MATKL")); |
||||
pstmt.setString(9, o.getString("MEINS")); |
||||
pstmt.setString(10, o.getString("NORMT")); |
||||
pstmt.setString(11, o.getString("FERTH")); |
||||
pstmt.setString(12, o.getString("Z_BRDTYPE")); |
||||
pstmt.setString(13, o.getString("Z_BRDID")); |
||||
pstmt.setString(14, o.getString("Z_REGION")); |
||||
pstmt.setString(15, o.getString("Z_CMNFTYPE")); |
||||
pstmt.setString(16, o.getString("Z_PRDLINE")); |
||||
pstmt.setString(17, o.getString("Z_STYLEID")); |
||||
pstmt.setString(18, o.getString("Z_SRCTYPE")); |
||||
pstmt.setString(19, o.getString("Z_ASSM")); |
||||
pstmt.setString(20, o.getString("Z_WPNL")); |
||||
pstmt.setString(21, o.getString("Z_SIZE")); |
||||
pstmt.setString(22, o.getString("Z_RATIO")); |
||||
pstmt.setString(23, o.getString("Z_PNLLIGHT")); |
||||
pstmt.setString(24, o.getString("Z_PNLSUPTYPE")); |
||||
pstmt.setString(25, o.getString("Z_PNLBRDID")); |
||||
pstmt.setString(26, o.getString("Z_FUNTYPE")); |
||||
pstmt.setString(27, o.getString("Z_SGNTYPE")); |
||||
pstmt.setString(28, o.getString("Z_CUSTNAME")); |
||||
pstmt.setString(29, o.getString("Z_PARSE")); |
||||
pstmt.setString(30, o.getString("Z_BG")); |
||||
pstmt.setString(31, o.getString("Z_SMARTTV")); |
||||
pstmt.setString(32, o.getString("Z_DOBLY")); |
||||
pstmt.setString(33, o.getString("GEBSQ")); |
||||
pstmt.setString(34, o.getString("HSCODE")); |
||||
pstmt.setString(35, o.getString("CMODEL")); |
||||
pstmt.setString(36, o.getString("MATNR_LCM")); |
||||
pstmt.setString(37, o.getString("MAKTX_LCM")); |
||||
pstmt.setString(38, userName); |
||||
pstmt.setDate(39, new Date(System.currentTimeMillis())); |
||||
int i = pstmt.executeUpdate(); |
||||
return i; |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error("执行更新SQL报错: sql:{}", e, sqlJSON); |
||||
} finally { |
||||
if (pstmt != null) { |
||||
pstmt.close(); |
||||
} |
||||
} |
||||
return 0; |
||||
|
||||
} |
||||
|
||||
private static final String sqlexJSON = "INSERT INTO TPV_OMP_MATERIAL_DATA_STATUS (FACTORY,TPV_MODEL,STATUS,USER_NAME,CREATE_TIME) VALUES (?,?,?,?,?)"; |
||||
|
||||
public int saveReJSON(JSONObject o, String userName) throws SQLException { |
||||
logger.info("update data by sql:" + sqlexJSON + " params " + o); |
||||
PreparedStatement pstmt = null; |
||||
Connection connection = null; |
||||
try { |
||||
com.fr.data.impl.Connection dbConnect = getDbConnect(); |
||||
connection = dbConnect.createConnection(); |
||||
pstmt = connection.prepareStatement(sqlexJSON); |
||||
pstmt.setString(1, o.getString("WERKS")); |
||||
pstmt.setString(2, o.getString("MATNR")); |
||||
pstmt.setString(3, o.getString("RETURN")); |
||||
pstmt.setString(4, userName); |
||||
pstmt.setDate(5, new Date(System.currentTimeMillis())); |
||||
int i = pstmt.executeUpdate(); |
||||
return i; |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error("执行更新SQL报错: sql:{}", e, sqlJSON); |
||||
} finally { |
||||
if (pstmt != null) { |
||||
pstmt.close(); |
||||
} |
||||
if (connection != null) { |
||||
connection.close(); |
||||
} |
||||
} |
||||
return 0; |
||||
} |
||||
} |
@ -0,0 +1,25 @@
|
||||
var data = [] |
||||
|
||||
for (i = 0; i < len; i++) { |
||||
var factory = _g().getCellValue(0, 1, i + 4); |
||||
//获取B5的扩展值
|
||||
var wl = _g().getCellValue(0, 2, i + 4); |
||||
//获取C5的扩展值
|
||||
data.push({ |
||||
"MATNR": wl, |
||||
"WERKS": factory |
||||
}) |
||||
} |
||||
$.ajax({ |
||||
url: "/webroot/decision/url/sapApi", |
||||
type: "POST", |
||||
contentType: "application/json", |
||||
data: JSON.stringify(data), |
||||
dataType: "json", |
||||
success: function (e) { |
||||
alert("提交响应:" + e) |
||||
}, |
||||
error: function () { |
||||
alert("提交失败请联系技术支持查看日志") |
||||
} |
||||
}) |
Loading…
Reference in new issue