|
|
|
|
package com.engine.ld.optimize;
|
|
|
|
|
|
|
|
|
|
import com.engine.core.exception.ECException;
|
|
|
|
|
import com.weaver.general.BaseBean;
|
|
|
|
|
import com.weaver.general.Util;
|
|
|
|
|
import org.w3c.dom.Document;
|
|
|
|
|
import org.w3c.dom.Element;
|
|
|
|
|
import org.w3c.dom.NodeList;
|
|
|
|
|
import org.xml.sax.InputSource;
|
|
|
|
|
import org.xml.sax.SAXException;
|
|
|
|
|
import weaver.conn.RecordSet;
|
|
|
|
|
|
|
|
|
|
import javax.xml.parsers.DocumentBuilder;
|
|
|
|
|
import javax.xml.parsers.DocumentBuilderFactory;
|
|
|
|
|
import javax.xml.parsers.ParserConfigurationException;
|
|
|
|
|
import javax.xml.transform.OutputKeys;
|
|
|
|
|
import javax.xml.transform.Transformer;
|
|
|
|
|
import javax.xml.transform.TransformerException;
|
|
|
|
|
import javax.xml.transform.TransformerFactory;
|
|
|
|
|
import javax.xml.transform.dom.DOMSource;
|
|
|
|
|
import javax.xml.transform.stream.StreamResult;
|
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.StringReader;
|
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author ZhangLei
|
|
|
|
|
* @date 2021/6/24
|
|
|
|
|
* 客户主数据
|
|
|
|
|
*/
|
|
|
|
|
public class Khzsj {
|
|
|
|
|
private static final BaseBean bb = new BaseBean();
|
|
|
|
|
|
|
|
|
|
//新建
|
|
|
|
|
public String create(String requestid,String tableName) throws ParserConfigurationException, UnsupportedEncodingException {
|
|
|
|
|
// String workflowId = properties.getProperty("KhzsjworkflowId");
|
|
|
|
|
Map<String, Object> requestdMap = new HashMap<>();
|
|
|
|
|
String requestName = "客户主数据创建流程";
|
|
|
|
|
bb.writeLog("客户主数据创建流程");
|
|
|
|
|
// params数组存储数据库中的表字段名
|
|
|
|
|
String[] groupParams = {"KTOKD","KUNNR","TITLE","NAME1","NAME2","NAME3","NAME4","SORT1",
|
|
|
|
|
"SORT2","STRAS","HOUSE_NUM1","POST_CODE1","CITY1","COUNTRY","REGION","TIME_ZONE",
|
|
|
|
|
"LANGU","TELF1","TELF2","FAX_NUMBER","SMTP_ADDR","LIFNR","BRSCH","BRAN1","STCEG",
|
|
|
|
|
"BANKS","BANKN","BANKL","IBAN","KUKLA","ZFLAG","LOEVMJT","BANKA"};
|
|
|
|
|
// 注意
|
|
|
|
|
// LOEVM LOEVMJT
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String[] companyParams = {"KUNNRGSDM","BUKRS","AKONT","ZUAWA","ZTERM","TOGRU","ZWELS",
|
|
|
|
|
"LOEVMGSDM","ZFLAGGSDM"};
|
|
|
|
|
// 注意
|
|
|
|
|
// KUNNR KUNNRGSDM
|
|
|
|
|
// LOEVM LOEVMGSDM
|
|
|
|
|
// ZFLAG ZFLAGGSDM
|
|
|
|
|
|
|
|
|
|
String[] saleParams = {"KUNNRXSZZ","VKORG","VTWEG","SPART","BZIRK","VKBUR","VKGRP","KDGRP",
|
|
|
|
|
"KONDA","KALKS","PLTYP","VERSG","LPRIO","VSBED","VWERK","KZAZU","ANTLF","WAERS",
|
|
|
|
|
"ZTERMXSZZ","INCO1","INCO2","KTGRD","ALAND","TATYP","TAXKD","ZKTONR_BP","ZKTONR_PY",
|
|
|
|
|
"ZKTONR_SH","LOEVMXSZZ","ZFLAGXSZZ"};
|
|
|
|
|
// 注意
|
|
|
|
|
// KUNNRXSZZ KUNNR
|
|
|
|
|
// ZTERMXSZZ ZTERM
|
|
|
|
|
// LOEVMXSZZ LOEVM
|
|
|
|
|
// ZFLAGXSZZ ZFLAG
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 查询
|
|
|
|
|
// 查询GROUP子节点所需要的数据
|
|
|
|
|
Map<String, Object> selectGroup = select(groupParams, tableName, requestid);
|
|
|
|
|
// 查询Company子节点所需要的数据
|
|
|
|
|
Map<String, Object> selectCompany = select(companyParams, tableName, requestid);
|
|
|
|
|
// 查询sale自己的点所需要的数据
|
|
|
|
|
Map<String, Object> selectSale = select(saleParams, tableName, requestid);
|
|
|
|
|
|
|
|
|
|
// 组装XML并返回
|
|
|
|
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
|
|
|
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
|
|
|
|
Document document = builder.newDocument();
|
|
|
|
|
Element root = document.createElement("ROOT");
|
|
|
|
|
document.appendChild(root);
|
|
|
|
|
|
|
|
|
|
// 创建GROUP节点以及子节点,并赋值
|
|
|
|
|
Element group = document.createElement("GROUP");
|
|
|
|
|
for (String groupParam : groupParams) {
|
|
|
|
|
if ("LOEVMJT".equals(groupParam)){
|
|
|
|
|
appendChild(document,group,"LOEVM", Util.null2String(selectGroup.get(groupParam).toString()));
|
|
|
|
|
}else if ("LANGU".equals(groupParam)){
|
|
|
|
|
appendChild(document,group,"LANGU","ZH".equals(selectGroup.get(groupParam).toString())?"1":"2");
|
|
|
|
|
}else if ("BRAN1".equals(groupParam)){
|
|
|
|
|
appendChild(document,group,"BRAN1","");
|
|
|
|
|
}else {
|
|
|
|
|
appendChild(document,group,groupParam, Util.null2String(selectGroup.get(groupParam).toString()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
root.appendChild(group);
|
|
|
|
|
|
|
|
|
|
// 创建COMPANY节点以及子节点并赋值
|
|
|
|
|
Element company = document.createElement("COMPANY");
|
|
|
|
|
for (String companyParam : companyParams) {
|
|
|
|
|
if ("KUNNRGSDM".equals(companyParam)){
|
|
|
|
|
appendChild(document,company,"KUNNR", Util.null2String(selectCompany.get(companyParam).toString()));
|
|
|
|
|
// appendChild(document,company,"KUNNR","");
|
|
|
|
|
}else if ("LOEVMGSDM".equals(companyParam)){
|
|
|
|
|
appendChild(document,company,"LOEVM", Util.null2String(selectCompany.get(companyParam).toString()));
|
|
|
|
|
}else if ("ZFLAGGSDM".equals(companyParam)){
|
|
|
|
|
appendChild(document,company,"ZFLAG", Util.null2String(selectCompany.get(companyParam).toString()));
|
|
|
|
|
}else {
|
|
|
|
|
appendChild(document,company,companyParam, Util.null2String(selectCompany.get(companyParam).toString()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
root.appendChild(company);
|
|
|
|
|
|
|
|
|
|
// 创建SALE节点以及子节点并赋值
|
|
|
|
|
Element sale = document.createElement("SALE");
|
|
|
|
|
for (String saleParam : saleParams) {
|
|
|
|
|
if ("KUNNRXSZZ".equals(saleParam)){
|
|
|
|
|
appendChild(document,sale,"KUNNR", Util.null2String(selectSale.get(saleParam).toString()));
|
|
|
|
|
// appendChild(document,sale,"KUNNR","");
|
|
|
|
|
}else if ("ZTERMXSZZ".equals(saleParam)){
|
|
|
|
|
appendChild(document,sale,"ZTERM", Util.null2String(selectSale.get(saleParam).toString()));
|
|
|
|
|
}else if ("LOEVMXSZZ".equals(saleParam)){
|
|
|
|
|
appendChild(document,sale,"LOEVM", Util.null2String(selectSale.get(saleParam).toString()));
|
|
|
|
|
}else if ("ZFLAGXSZZ".equals(saleParam)){
|
|
|
|
|
appendChild(document,sale,"ZFLAG", Util.null2String(selectSale.get(saleParam).toString()));
|
|
|
|
|
}else {
|
|
|
|
|
appendChild(document,sale,saleParam, Util.null2String(selectSale.get(saleParam).toString()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
root.appendChild(sale);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bb.writeLog("客户主数据创建流程requestid:"+requestid);
|
|
|
|
|
bb.writeLog("result: " + createXmlToString(document));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return createXmlToString(document);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//修改
|
|
|
|
|
public void updateWorkflow(String requestid, String xmlResult,String tableName){
|
|
|
|
|
bb.writeLog("请求返回的xmlResult:" + xmlResult);
|
|
|
|
|
String updateSql = "update "+tableName+" set TYPE = ?, MESSAGE = ? where requestid = ?";
|
|
|
|
|
if(xmlResult == null || "".equals(xmlResult) || requestid == null || "".equals(requestid)) {
|
|
|
|
|
throw new ECException("参数不全");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
xmlResult = trimXmlStr(xmlResult);
|
|
|
|
|
Document document;
|
|
|
|
|
try {
|
|
|
|
|
document = strToDocument(xmlResult);
|
|
|
|
|
} catch(Exception e) {
|
|
|
|
|
bb.writeLog("XML解析失败: " + e.getMessage());
|
|
|
|
|
bb.writeLog("xmlResult: " + xmlResult);
|
|
|
|
|
throw new ECException("XML解析失败: " + e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Element root = document.getDocumentElement();
|
|
|
|
|
NodeList typeNodeList = root.getElementsByTagName("TYPE");
|
|
|
|
|
NodeList messageNodeList = root.getElementsByTagName("MESSAGE");
|
|
|
|
|
|
|
|
|
|
if(typeNodeList.getLength() > 0 && messageNodeList.getLength() > 0) {
|
|
|
|
|
String type = Util.null2String(typeNodeList.item(0).getTextContent());
|
|
|
|
|
String message = Util.null2String(messageNodeList.item(0).getTextContent());
|
|
|
|
|
bb.writeLog("type: " + type);
|
|
|
|
|
bb.writeLog("message : " + message);
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
rs.executeUpdate(updateSql, type, message, requestid);
|
|
|
|
|
} else {
|
|
|
|
|
bb.writeLog("未获取到正常返回数据");
|
|
|
|
|
bb.writeLog("xmlResult: " + xmlResult);
|
|
|
|
|
throw new ECException("未获取到正常返回数据");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 入参:
|
|
|
|
|
* 1、String[]:记录要查哪些字段
|
|
|
|
|
* 2、查询的表名
|
|
|
|
|
* 3、where条件(requestId)
|
|
|
|
|
* 出参:Map<String,Object>:记录根据入参查询的结果
|
|
|
|
|
* 以应对需要分组返回xml时的情况
|
|
|
|
|
* */
|
|
|
|
|
private static Map<String,Object> select(String[] params, String tableName, String selectWhere){
|
|
|
|
|
Map<String,Object> resultMap = new HashMap<>();
|
|
|
|
|
// 组装xml
|
|
|
|
|
StringBuilder sql = new StringBuilder("SELECT ");
|
|
|
|
|
for (int i = 0; i < params.length; i++) {
|
|
|
|
|
if (i == params.length-1){
|
|
|
|
|
sql.append(params[i]).append(" from ");
|
|
|
|
|
}else if ("BRAN1".equals(params[i])){
|
|
|
|
|
sql.append("");
|
|
|
|
|
}else {
|
|
|
|
|
sql.append(params[i]).append(',');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sql.append(tableName).append(" WHERE REQUESTID = ").append(selectWhere);
|
|
|
|
|
|
|
|
|
|
// 查询
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
rs.executeQuery(sql.toString());
|
|
|
|
|
if (rs.next()){
|
|
|
|
|
for (String param : params) {
|
|
|
|
|
resultMap.put(param, Util.null2String(rs.getString(param)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return resultMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* xml固定头部
|
|
|
|
|
*/
|
|
|
|
|
private static String xmlHeadStr() {
|
|
|
|
|
return "<asx:abap version=\"1.0\" xmlns:asx=\"http://www.sap.com/abapxml\">\n" +
|
|
|
|
|
"\t<asx:values>\n" +
|
|
|
|
|
" <_--5CTYPE_--3DSTRING>\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* xml固定尾部
|
|
|
|
|
*/
|
|
|
|
|
private static String xmlTailStr() {
|
|
|
|
|
return " </_--5CTYPE_--3DSTRING>\n" +
|
|
|
|
|
"\t</asx:values>\n" +
|
|
|
|
|
"</asx:abap>";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生成xml字符串
|
|
|
|
|
* @param document Document树对象
|
|
|
|
|
* @return 整个xml字符串
|
|
|
|
|
*/
|
|
|
|
|
private static String createXmlToString(Document document){
|
|
|
|
|
String xmlString = null;
|
|
|
|
|
try {
|
|
|
|
|
// 创建TransformerFactory工厂对象
|
|
|
|
|
TransformerFactory transFactory = TransformerFactory.newInstance();
|
|
|
|
|
// 通过工厂对象, 创建Transformer对象
|
|
|
|
|
Transformer transformer = transFactory.newTransformer();
|
|
|
|
|
transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
|
|
|
|
|
//使Xml自动换行, 并自动缩进
|
|
|
|
|
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "");
|
|
|
|
|
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); //中间的参数网址固定写法(这里还没搞懂)
|
|
|
|
|
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //是否设置缩进(indent: yes|no)
|
|
|
|
|
// 创建DOMSource对象并将Document加载到其中
|
|
|
|
|
DOMSource domSource = new DOMSource(document);
|
|
|
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
|
|
|
// 使用Transformer的transform()方法将DOM树转换成XML
|
|
|
|
|
transformer.transform(domSource, new StreamResult(bos));
|
|
|
|
|
xmlString = bos.toString();
|
|
|
|
|
} catch (TransformerException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
return xmlString;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* document对象中添加子项
|
|
|
|
|
* @param document ducument对象
|
|
|
|
|
* @param parent 父元素
|
|
|
|
|
* @param key 元素标签
|
|
|
|
|
* @param value 元素content值
|
|
|
|
|
*/
|
|
|
|
|
private static void appendChild(Document document, Element parent, String key, String value) {
|
|
|
|
|
Element child = document.createElement(key);
|
|
|
|
|
if(child != null) {
|
|
|
|
|
child.setTextContent(value);
|
|
|
|
|
}
|
|
|
|
|
parent.appendChild(child);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 去除<_--5CTYPE_--3DSTRING>之前部分,去除</_--5CTYPE_--3DSTRING>之后部分
|
|
|
|
|
* @param xmlString xml字符串
|
|
|
|
|
* @return 去除头尾部分的xml字符串
|
|
|
|
|
*/
|
|
|
|
|
private static String trimXmlStr(String xmlString) {
|
|
|
|
|
if(!xmlString.contains("<_--5CTYPE_--3DSTRING>")) {
|
|
|
|
|
return xmlString;
|
|
|
|
|
}
|
|
|
|
|
int start = xmlString.indexOf("<_--5CTYPE_--3DSTRING>") + "<_--5CTYPE_--3DSTRING>".length();
|
|
|
|
|
int end = xmlString.indexOf("</_--5CTYPE_--3DSTRING>");
|
|
|
|
|
return xmlString.substring(start, end).trim();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 将字符串转为xmldom对象
|
|
|
|
|
* @param xmlString xml字符串
|
|
|
|
|
* @return dom对象
|
|
|
|
|
* @throws ParserConfigurationException 创建document对象异常
|
|
|
|
|
* @throws IOException IO异常
|
|
|
|
|
* @throws SAXException 解析异常
|
|
|
|
|
*/
|
|
|
|
|
private static Document strToDocument(String xmlString) throws ParserConfigurationException, IOException, SAXException {
|
|
|
|
|
|
|
|
|
|
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
|
|
|
|
dbf.setNamespaceAware(true);
|
|
|
|
|
DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
|
|
|
|
|
return documentBuilder.parse(
|
|
|
|
|
new InputSource(new StringReader(xmlString)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|