635 lines
30 KiB
Java
635 lines
30 KiB
Java
![]() |
package com.yem.wm.utils;
|
|||
|
|
|||
|
import com.alibaba.fastjson.JSONArray;
|
|||
|
import com.alibaba.fastjson.JSONObject;
|
|||
|
import com.alipay.api.internal.util.file.IOUtils;
|
|||
|
import com.yem.ia.intebilllogon.Utils.ObjectToJsonUtils;
|
|||
|
import kd.bos.dataentity.OperateOption;
|
|||
|
import kd.bos.dataentity.entity.DynamicObject;
|
|||
|
import kd.bos.entity.EntityMetadataCache;
|
|||
|
import kd.bos.entity.ExtendedDataEntity;
|
|||
|
import kd.bos.entity.MainEntityType;
|
|||
|
import kd.bos.entity.operate.result.OperationResult;
|
|||
|
import kd.bos.entity.validate.ErrorLevel;
|
|||
|
import kd.bos.entity.validate.ValidationErrorInfo;
|
|||
|
import kd.bos.exception.KDBizException;
|
|||
|
import kd.bos.exception.KDException;
|
|||
|
import kd.bos.id.ID;
|
|||
|
import kd.bos.orm.query.QCP;
|
|||
|
import kd.bos.orm.query.QFilter;
|
|||
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|||
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|||
|
import kd.drp.mem.yzj.config.SSLClient;
|
|||
|
import org.apache.commons.fileupload.FileItem;
|
|||
|
import org.apache.commons.fileupload.FileItemFactory;
|
|||
|
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
|||
|
import org.apache.http.Consts;
|
|||
|
import org.apache.http.HttpEntity;
|
|||
|
import org.apache.http.HttpResponse;
|
|||
|
import org.apache.http.HttpStatus;
|
|||
|
import org.apache.http.client.HttpClient;
|
|||
|
import org.apache.http.client.config.RequestConfig;
|
|||
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
|||
|
import org.apache.http.client.methods.HttpGet;
|
|||
|
import org.apache.http.client.methods.HttpPost;
|
|||
|
import org.apache.http.entity.ContentType;
|
|||
|
import org.apache.http.entity.StringEntity;
|
|||
|
import org.apache.http.entity.mime.HttpMultipartMode;
|
|||
|
import org.apache.http.entity.mime.MultipartEntityBuilder;
|
|||
|
import org.apache.http.entity.mime.content.StringBody;
|
|||
|
import org.apache.http.impl.client.CloseableHttpClient;
|
|||
|
import org.apache.http.impl.client.HttpClientBuilder;
|
|||
|
import org.apache.http.impl.client.HttpClients;
|
|||
|
import org.apache.http.message.BasicHeader;
|
|||
|
import org.apache.http.util.EntityUtils;
|
|||
|
import org.springframework.web.multipart.MultipartFile;
|
|||
|
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
|||
|
|
|||
|
import java.io.*;
|
|||
|
import java.net.HttpURLConnection;
|
|||
|
import java.net.URL;
|
|||
|
import java.nio.charset.Charset;
|
|||
|
import java.nio.charset.StandardCharsets;
|
|||
|
import java.security.KeyManagementException;
|
|||
|
import java.security.NoSuchAlgorithmException;
|
|||
|
import java.util.HashMap;
|
|||
|
import java.util.List;
|
|||
|
import java.util.Map;
|
|||
|
|
|||
|
public class YunzhijiaUtils {
|
|||
|
public static String yzjurl = "http://10.64.113.120:8080";//测试
|
|||
|
public static String getOpenId(String phonNum) throws IOException, NoSuchAlgorithmException, KeyManagementException {
|
|||
|
String req ="{\"type\":0,\"array\":[\""+phonNum+"\"]}";
|
|||
|
String openId = null;
|
|||
|
String retstr = doPost(yzjurl + "/cmmpapi/cmmp/person.do?tokenId=D4EB05B9FE9C41D0868D33EC92AAEDB4", req);
|
|||
|
JSONObject retJson = JSONObject.parseObject(retstr);
|
|||
|
JSONArray datas = retJson.getJSONArray("data");
|
|||
|
for (int i = 0; i < datas.size(); i++) {
|
|||
|
JSONObject data = datas.getJSONObject(i);
|
|||
|
openId = data.getString("openId");
|
|||
|
}
|
|||
|
return openId;
|
|||
|
}
|
|||
|
public static String doPost(String url, String param) throws IOException, NoSuchAlgorithmException, KeyManagementException {
|
|||
|
HttpClient httpClient = null;
|
|||
|
HttpPost httpPost = null;
|
|||
|
String result = null;
|
|||
|
httpClient = new SSLClient();
|
|||
|
// httpClient = new DefaultHttpClient();
|
|||
|
httpPost = new HttpPost(url);
|
|||
|
|
|||
|
StringEntity se = new StringEntity(param, "UTF-8");
|
|||
|
se.setContentEncoding(new BasicHeader("Content-Type", "application/json"));
|
|||
|
se.setContentType("application/json");
|
|||
|
httpPost.setEntity(se);
|
|||
|
HttpResponse response = httpClient.execute(httpPost);
|
|||
|
if (response != null) {
|
|||
|
HttpEntity resEntity = response.getEntity();
|
|||
|
if (resEntity != null) result = EntityUtils.toString(resEntity, "UTF-8");
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 文件上传
|
|||
|
*
|
|||
|
* @param url
|
|||
|
* @param bytes
|
|||
|
* @param accessToken
|
|||
|
* @param filename
|
|||
|
* @return
|
|||
|
* @throws IOException
|
|||
|
* @throws NoSuchAlgorithmException
|
|||
|
* @throws KeyManagementException
|
|||
|
*/
|
|||
|
public static String doPost(String url, byte[] bytes, String accessToken, String filename) throws IOException, NoSuchAlgorithmException, KeyManagementException {
|
|||
|
String result = null;
|
|||
|
HttpPost httpPost = new HttpPost(url);
|
|||
|
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
|||
|
builder.addBinaryBody("file", bytes, ContentType.DEFAULT_BINARY, filename.getBytes(StandardCharsets.UTF_8).toString());
|
|||
|
builder.addTextBody("bizkey", "cloudflow");
|
|||
|
builder.setCharset(Charset.forName("utf-8"));
|
|||
|
HttpClient httpClient = HttpClientBuilder.create().build();
|
|||
|
httpPost.setEntity(builder.build());
|
|||
|
httpPost.addHeader("Cache-Control", "no-cache");
|
|||
|
httpPost.addHeader("x-accessToken", accessToken);
|
|||
|
httpPost.addHeader("ContentType", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
|
|||
|
HttpResponse response = httpClient.execute(httpPost);
|
|||
|
if (response != null) {
|
|||
|
HttpEntity resEntity = response.getEntity();
|
|||
|
if (resEntity != null) result = EntityUtils.toString(resEntity, "utf-8");
|
|||
|
}
|
|||
|
// 处理服务器返回的响应结果
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 提交创建云之家审批流程
|
|||
|
*
|
|||
|
* @param operationResult 操作结果参数
|
|||
|
* @param passDataEntitys 通过校验数据数组
|
|||
|
* @param dataEntity 传输数据
|
|||
|
*/
|
|||
|
public static void submit2YZJ(OperationResult operationResult, List<ExtendedDataEntity> passDataEntitys, ExtendedDataEntity dataEntity) {
|
|||
|
DynamicObject dynamicObject = dataEntity.getDataEntity();
|
|||
|
dynamicObject = BusinessDataServiceHelper.loadSingle(dynamicObject.getLong("id"), dynamicObject.getDynamicObjectType().getName());
|
|||
|
Map map = new HashMap<>();
|
|||
|
map.put("entityName", dynamicObject.getDynamicObjectType().getName());
|
|||
|
if (dynamicObject.containsProperty("yem_billtype")) {
|
|||
|
map.put("billtype", dynamicObject.getString("yem_billtype.number"));
|
|||
|
}
|
|||
|
//TODO 订单产品需求单特殊处理
|
|||
|
if ("yem_orderproreqbill".equals(dynamicObject.getDynamicObjectType().getName())&&"yem_orderproreqbill_DB".equals(dynamicObject.getString("yem_billtype.number"))) {
|
|||
|
map.put("Stashtype", dynamicObject.getString("yem_isvmi"));
|
|||
|
}
|
|||
|
if("yem_placeexamine".equals(dynamicObject.getDynamicObjectType().getName())){
|
|||
|
map.put("yem_salesordertype",dynamicObject.getString("yem_salesordertype"));
|
|||
|
}
|
|||
|
//end by zhouc 2024-01-11
|
|||
|
if("yem_es_contactbook".equals(dynamicObject.getDynamicObjectType().getName())){
|
|||
|
map.put("yem_procbilltype",dynamicObject.getString("yem_procbilltype"));
|
|||
|
}
|
|||
|
// DynamicObject[] load = BusinessDataServiceHelper.load("yem_ia_intebilllogon", "id", new QFilter[]{null});
|
|||
|
// for (DynamicObject obj : load) {
|
|||
|
// obj = BusinessDataServiceHelper.loadSingle(obj.get("id"),"yem_ia_intebilllogon");
|
|||
|
// if(((MulBasedataDynamicObjectCollection)obj.get("yem_billtype")).size()>0){
|
|||
|
// System.out.println();
|
|||
|
// }
|
|||
|
// }
|
|||
|
JSONObject json = ObjectToJsonUtils.ObjectToJson(dynamicObject.get("id"), map);
|
|||
|
if (json.containsKey("errmessage")) {
|
|||
|
passDataEntitys.add(dataEntity);
|
|||
|
return;
|
|||
|
}
|
|||
|
try {
|
|||
|
String s = YunzhijiaUtils.doPost(YunzhijiaUtils.yzjurl+"/cmmpapi/cmmp/flowCreate.do?tokenId=0C89F5DBEB704C1F8671721B148E8224", json.toString());
|
|||
|
System.out.println(s);
|
|||
|
JSONObject retJson = JSONObject.parseObject(s);
|
|||
|
Boolean success = retJson.getBoolean("success");
|
|||
|
if (success) {
|
|||
|
JSONObject data = retJson.getJSONObject("data");
|
|||
|
String formInstId = data.getString("formInstId");//表单定义ID
|
|||
|
String flowInstId = data.getString("flowInstId");//流程实例ID
|
|||
|
dynamicObject.set("yem_synfalt",null);
|
|||
|
dynamicObject = BusinessDataServiceHelper.loadSingle(dynamicObject.get("id"), dynamicObject.getDynamicObjectType().getName());
|
|||
|
dynamicObject.set("yem_forminstid", formInstId);
|
|||
|
dynamicObject.set("yem_flowinstid", flowInstId);
|
|||
|
dynamicObject.set("yem_isyzjreject", false);
|
|||
|
SaveServiceHelper.update(dynamicObject, OperateOption.create());
|
|||
|
// 根据实体名构建元数据并创建DynamicObject
|
|||
|
MainEntityType entityType = EntityMetadataCache.getDataEntityType("yem_ialog");
|
|||
|
DynamicObject yemIalog = new DynamicObject(entityType);
|
|||
|
yemIalog.getDataEntityType().getPrimaryKey().setValueFast(yemIalog, ID.genLongId());
|
|||
|
yemIalog.set("billno", dynamicObject.get("billno"));//单据编号
|
|||
|
DynamicObject yem_billtype = BusinessDataServiceHelper.loadSingle("bos_entityobject", new QFilter[]{new QFilter("number", QCP.equals, dynamicObject.getDynamicObjectType().getName())});
|
|||
|
yemIalog.set("yem_billtype", yem_billtype);//单据类型
|
|||
|
yemIalog.set("yem_success", success);//是否成功
|
|||
|
yemIalog.set("yem_req", json.toString());//请求参数
|
|||
|
yemIalog.set("billstatus", "A");//请求参数
|
|||
|
|
|||
|
yemIalog.set("yem_response", s);//返回参数
|
|||
|
yemIalog.set("yem_flowinstid", flowInstId);//流程实例ID
|
|||
|
yemIalog.set("yem_forminstid", formInstId);//表单实例ID
|
|||
|
SaveServiceHelper.save(new DynamicObject[]{yemIalog});
|
|||
|
passDataEntitys.add(dataEntity);
|
|||
|
} else {
|
|||
|
// 根据实体名构建元数据并创建DynamicObject
|
|||
|
MainEntityType entityType = EntityMetadataCache.getDataEntityType("yem_ialog");
|
|||
|
DynamicObject yemIalog = new DynamicObject(entityType);
|
|||
|
yemIalog.getDataEntityType().getPrimaryKey().setValueFast(yemIalog, ID.genLongId());
|
|||
|
yemIalog.set("billstatus", "A");//请求参数
|
|||
|
yemIalog.set("billno", dynamicObject.get("billno"));//单据编号
|
|||
|
DynamicObject yem_billtype = BusinessDataServiceHelper.loadSingle("bos_entityobject", new QFilter[]{new QFilter("number", QCP.equals, dynamicObject.getDynamicObjectType().getName())});
|
|||
|
yemIalog.set("yem_billtype", yem_billtype);//单据类型
|
|||
|
yemIalog.set("yem_success", false);//是否成功
|
|||
|
yemIalog.set("yem_req", json.toString());//请求参数
|
|||
|
yemIalog.set("yem_response", s);//返回参数
|
|||
|
SaveServiceHelper.save(new DynamicObject[]{yemIalog});
|
|||
|
addErrMessage(operationResult, dataEntity, "云之家生成流程异常:" + s);
|
|||
|
}
|
|||
|
} catch (Exception ex) {
|
|||
|
ex.printStackTrace();
|
|||
|
// 根据实体名构建元数据并创建DynamicObject
|
|||
|
MainEntityType entityType = EntityMetadataCache.getDataEntityType("yem_ialog");
|
|||
|
DynamicObject yemIalog = new DynamicObject(entityType);
|
|||
|
yemIalog.getDataEntityType().getPrimaryKey().setValueFast(yemIalog, ID.genLongId());
|
|||
|
yemIalog.set("billstatus", "A");//请求参数
|
|||
|
yemIalog.set("billno", dynamicObject.get("billno"));//单据编号
|
|||
|
DynamicObject yem_billtype = BusinessDataServiceHelper.loadSingle("bos_entityobject", new QFilter[]{new QFilter("number", QCP.equals, dynamicObject.getDynamicObjectType().getName())});
|
|||
|
yemIalog.set("yem_billtype", yem_billtype);//单据类型
|
|||
|
yemIalog.set("yem_success", false);//是否成功
|
|||
|
yemIalog.set("yem_req", json.toString());//请求参数
|
|||
|
if (ex instanceof KDException) {
|
|||
|
yemIalog.set("yem_error", ((KDException) ex).getStackTraceMessage());//异常信息
|
|||
|
addErrMessage(operationResult, dataEntity, "云之家接口调用异常:" + ((KDException) ex).getStackTraceMessage());
|
|||
|
} else {
|
|||
|
yemIalog.set("yem_error", ex.toString());//异常信息
|
|||
|
addErrMessage(operationResult, dataEntity, "云之家接口调用异常:" + ex.toString());
|
|||
|
}
|
|||
|
SaveServiceHelper.save(new DynamicObject[]{yemIalog});
|
|||
|
}
|
|||
|
}
|
|||
|
public static void submit2YZJ(OperationResult operationResult, List<DynamicObject> passDataEntitys, DynamicObject dynamicObject) {
|
|||
|
String billstatus = dynamicObject.getString("billstatus");
|
|||
|
dynamicObject = BusinessDataServiceHelper.loadSingle(dynamicObject.getLong("id"), dynamicObject.getDynamicObjectType().getName());
|
|||
|
|
|||
|
Map map = new HashMap<>();
|
|||
|
map.put("entityName", dynamicObject.getDynamicObjectType().getName());
|
|||
|
if (dynamicObject.containsProperty("yem_billtype")) {
|
|||
|
map.put("billtype", dynamicObject.getString("yem_billtype.number"));
|
|||
|
}
|
|||
|
//TODO 订单产品需求单特殊处理
|
|||
|
if ("yem_orderproreqbill".equals(dynamicObject.getDynamicObjectType().getName())&&"yem_orderproreqbill_DB".equals(dynamicObject.getString("yem_billtype.number"))) {
|
|||
|
map.put("Stashtype", dynamicObject.getString("yem_isvmi"));
|
|||
|
}
|
|||
|
if("yem_placeexamine".equals(dynamicObject.getDynamicObjectType().getName())){
|
|||
|
map.put("yem_salesordertype",dynamicObject.getString("yem_salesordertype"));
|
|||
|
}
|
|||
|
//end by zhouc 2024-01-11
|
|||
|
if("yem_es_contactbook".equals(dynamicObject.getDynamicObjectType().getName())){
|
|||
|
map.put("yem_procbilltype",dynamicObject.getString("yem_procbilltype"));
|
|||
|
}
|
|||
|
// DynamicObject[] load = BusinessDataServiceHelper.load("yem_ia_intebilllogon", "id", new QFilter[]{null});
|
|||
|
// for (DynamicObject obj : load) {
|
|||
|
// obj = BusinessDataServiceHelper.loadSingle(obj.get("id"),"yem_ia_intebilllogon");
|
|||
|
// if(((MulBasedataDynamicObjectCollection)obj.get("yem_billtype")).size()>0){
|
|||
|
// System.out.println();
|
|||
|
// }
|
|||
|
// }
|
|||
|
JSONObject json = ObjectToJsonUtils.ObjectToJson(dynamicObject.get("id"), map);
|
|||
|
|
|||
|
// dynamicObject.set("yem_synfalt",null);
|
|||
|
if (json.containsKey("errmessage")) {
|
|||
|
dynamicObject.set("billstatus",billstatus);
|
|||
|
SaveServiceHelper.update(dynamicObject);
|
|||
|
passDataEntitys.add(dynamicObject);
|
|||
|
return;
|
|||
|
}
|
|||
|
DynamicObject yem_billtype = BusinessDataServiceHelper.loadSingle("bos_entityobject", new QFilter[]{new QFilter("number", QCP.equals, dynamicObject.getDynamicObjectType().getName())});
|
|||
|
MainEntityType entityType = EntityMetadataCache.getDataEntityType("yem_ialog");
|
|||
|
DynamicObject yemIalog = new DynamicObject(entityType);
|
|||
|
try {
|
|||
|
String s = YunzhijiaUtils.doPost(YunzhijiaUtils.yzjurl+"/cmmpapi/cmmp/flowCreate.do?tokenId=0C89F5DBEB704C1F8671721B148E8224", json.toString());
|
|||
|
System.out.println(s);
|
|||
|
JSONObject retJson = JSONObject.parseObject(s);
|
|||
|
Boolean success = retJson.getBoolean("success");
|
|||
|
|
|||
|
if (success) {
|
|||
|
dynamicObject.set("yem_synfalt",null);
|
|||
|
JSONObject data = retJson.getJSONObject("data");
|
|||
|
String formInstId = data.getString("formInstId");//表单定义ID
|
|||
|
String flowInstId = data.getString("flowInstId");//流程实例ID
|
|||
|
dynamicObject = BusinessDataServiceHelper.loadSingle(dynamicObject.get("id"), dynamicObject.getDynamicObjectType().getName());
|
|||
|
dynamicObject.set("yem_forminstid", formInstId);
|
|||
|
dynamicObject.set("yem_flowinstid", flowInstId);
|
|||
|
dynamicObject.set("yem_isyzjreject", false);
|
|||
|
SaveServiceHelper.update(dynamicObject, OperateOption.create());
|
|||
|
// 根据实体名构建元数据并创建DynamicObject
|
|||
|
// DynamicObject yemIalog = new DynamicObject(entityType);
|
|||
|
yemIalog.getDataEntityType().getPrimaryKey().setValueFast(yemIalog, ID.genLongId());
|
|||
|
yemIalog.set("billno", dynamicObject.get("billno"));//单据编号
|
|||
|
// DynamicObject yem_billtype = BusinessDataServiceHelper.loadSingle("bos_entityobject", new QFilter[]{new QFilter("number", QCP.equals, dynamicObject.getDynamicObjectType().getName())});
|
|||
|
yemIalog.set("yem_billtype", yem_billtype);//单据类型
|
|||
|
yemIalog.set("yem_success", success);//是否成功
|
|||
|
yemIalog.set("yem_req", json.toString());//请求参数
|
|||
|
yemIalog.set("billstatus", "A");//请求参数
|
|||
|
|
|||
|
yemIalog.set("yem_response", s);//返回参数
|
|||
|
yemIalog.set("yem_flowinstid", flowInstId);//流程实例ID
|
|||
|
yemIalog.set("yem_forminstid", formInstId);//表单实例ID
|
|||
|
|
|||
|
passDataEntitys.add(dynamicObject);
|
|||
|
} else {
|
|||
|
// 根据实体名构建元数据并创建DynamicObject
|
|||
|
// MainEntityType entityType = EntityMetadataCache.getDataEntityType("yem_ialog");
|
|||
|
yemIalog.getDataEntityType().getPrimaryKey().setValueFast(yemIalog, ID.genLongId());
|
|||
|
yemIalog.set("billstatus", "A");//请求参数
|
|||
|
yemIalog.set("billno", dynamicObject.get("billno"));//单据编号
|
|||
|
// DynamicObject yem_billtype = BusinessDataServiceHelper.loadSingle("bos_entityobject", new QFilter[]{new QFilter("number", QCP.equals, dynamicObject.getDynamicObjectType().getName())});
|
|||
|
yemIalog.set("yem_billtype", yem_billtype);//单据类型
|
|||
|
yemIalog.set("yem_success", false);//是否成功
|
|||
|
yemIalog.set("yem_req", json.toString());//请求参数
|
|||
|
yemIalog.set("yem_response", s);//返回参数
|
|||
|
JSONObject Json = JSONObject.parseObject(s);
|
|||
|
// SaveServiceHelper.save(new DynamicObject[]{yemIalog});
|
|||
|
addErrMessage(operationResult, dynamicObject, "云之家生成流程异常:\r\n异常编码为【"+Json.getString("errorCode")+"】异常信息为:" + Json.getString("error"));
|
|||
|
}
|
|||
|
} catch (Exception ex) {
|
|||
|
|
|||
|
ex.printStackTrace();
|
|||
|
// 根据实体名构建元数据并创建DynamicObject
|
|||
|
// MainEntityType entityType = EntityMetadataCache.getDataEntityType("yem_ialog");
|
|||
|
// DynamicObject yemIalog = new DynamicObject(entityType);
|
|||
|
yemIalog.getDataEntityType().getPrimaryKey().setValueFast(yemIalog, ID.genLongId());
|
|||
|
yemIalog.set("billstatus", "A");//请求参数
|
|||
|
yemIalog.set("billno", dynamicObject.get("billno"));//单据编号
|
|||
|
|
|||
|
yemIalog.set("yem_billtype", yem_billtype);//单据类型
|
|||
|
yemIalog.set("yem_success", false);//是否成功
|
|||
|
yemIalog.set("yem_req", json.toString());//请求参数
|
|||
|
if (ex instanceof KDException) {
|
|||
|
yemIalog.set("yem_error", ((KDException) ex).getStackTraceMessage());//异常信息
|
|||
|
addErrMessage(operationResult, dynamicObject, "云之家接口调用异常:" + ((KDException) ex).getStackTraceMessage());
|
|||
|
} else {
|
|||
|
yemIalog.set("yem_error", ex.toString());//异常信息
|
|||
|
addErrMessage(operationResult, dynamicObject, "云之家接口调用异常:" + ex.toString());
|
|||
|
}
|
|||
|
SaveServiceHelper.save(new DynamicObject[]{yemIalog});
|
|||
|
}
|
|||
|
SaveServiceHelper.save(new DynamicObject[]{yemIalog});
|
|||
|
}
|
|||
|
/**
|
|||
|
* 向操作结果,添加一条错误提示
|
|||
|
*
|
|||
|
* @param operationResult 操作结果参数
|
|||
|
* @param dataEntity 校验数据
|
|||
|
* @param errMsg 异常信息
|
|||
|
* @return
|
|||
|
*/
|
|||
|
private static void addErrMessage(OperationResult operationResult, DynamicObject dataEntity, String errMsg) {
|
|||
|
operationResult.setSuccess(false);
|
|||
|
Object pkId = dataEntity.getPkValue();
|
|||
|
int rowIndex = 0;
|
|||
|
ErrorLevel errorLevel = ErrorLevel.Error;
|
|||
|
|
|||
|
ValidationErrorInfo errInfo = new ValidationErrorInfo("",
|
|||
|
pkId, 0, rowIndex,
|
|||
|
"BeforeExecuteOperationTransactionSample",
|
|||
|
"接口调用异常",
|
|||
|
"单据编号:【" + dataEntity.get("billno") + "】" + errMsg,
|
|||
|
errorLevel);
|
|||
|
operationResult.setMessage("提交失败");
|
|||
|
operationResult.addErrorInfo(errInfo);
|
|||
|
}
|
|||
|
/**
|
|||
|
* 向操作结果,添加一条错误提示
|
|||
|
*
|
|||
|
* @param operationResult 操作结果参数
|
|||
|
* @param dataEntity 校验数据
|
|||
|
* @param errMsg 异常信息
|
|||
|
* @return
|
|||
|
*/
|
|||
|
private static void addErrMessage(OperationResult operationResult, ExtendedDataEntity dataEntity, String errMsg) {
|
|||
|
operationResult.setSuccess(false);
|
|||
|
Object pkId = dataEntity.getDataEntity().getPkValue();
|
|||
|
int dataIndex = dataEntity.getDataEntityIndex();
|
|||
|
int rowIndex = 0;
|
|||
|
ErrorLevel errorLevel = ErrorLevel.Error;
|
|||
|
|
|||
|
ValidationErrorInfo errInfo = new ValidationErrorInfo("",
|
|||
|
pkId, dataIndex, rowIndex,
|
|||
|
"BeforeExecuteOperationTransactionSample",
|
|||
|
"接口调用异常",
|
|||
|
"单据编号:【" + dataEntity.getDataEntity().get("billno") + "】" + errMsg,
|
|||
|
errorLevel);
|
|||
|
|
|||
|
operationResult.addErrorInfo(errInfo);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取云之家Token
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getYzhToken() {
|
|||
|
//获取云之家token
|
|||
|
String url = YunzhijiaUtils.yzjurl+"/cmmpapi/cmmp/fileToken.do?tokenId=D4EB05B9FE9C41D0868D33EC92AAEDB4";
|
|||
|
String accessToken = null;
|
|||
|
try {
|
|||
|
String Token = YunzhijiaUtils.doPost(url, "");
|
|||
|
JSONObject json = JSONObject.parseObject(Token);
|
|||
|
Boolean success = json.getBoolean("success");
|
|||
|
if (success) {
|
|||
|
JSONObject data = json.getJSONObject("data");
|
|||
|
accessToken = data.getString("accessToken");
|
|||
|
}
|
|||
|
} catch (Exception ex) {
|
|||
|
throw new KDBizException(ex.toString());
|
|||
|
}
|
|||
|
return accessToken;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 云之家文件上传
|
|||
|
*
|
|||
|
* @param fileurl 文件下载地址
|
|||
|
* @param accessToken 云之家Token
|
|||
|
* @param filename 附件名称
|
|||
|
* @return 请求结果
|
|||
|
*/
|
|||
|
public static String uploadfile(String fileurl, String accessToken, String filename) {
|
|||
|
String result = null;
|
|||
|
try {
|
|||
|
byte[] byt = getUrlFileData(fileurl);
|
|||
|
MultipartFile multipartFile = getMultipartFile(filename, byt);
|
|||
|
Map<String, String> map = new HashMap<>();
|
|||
|
map.put("UserAgent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.24");
|
|||
|
map.put("ContentType", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
|
|||
|
map.put("x-accessToken", accessToken);
|
|||
|
map.put("Cache-Control", "no-cache");
|
|||
|
String url = "https://yunzhijia.com/docrest/doc/file/uploadfile";
|
|||
|
// result = YunzhijiaUtils.doPost("https://yunzhijia.com/docrest/doc/file/uploadfile", byt, accessToken, filename);
|
|||
|
result = doPostFormData(url, "file", multipartFile, new HashMap<>(), map);
|
|||
|
} catch (Exception ex) {
|
|||
|
String message = ex.getMessage();
|
|||
|
throw new KDBizException(message);
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 文件下载
|
|||
|
* @param fileId 文件id
|
|||
|
* @param accessToken 调用接口Token
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static byte[] downloadfile(String fileId, String accessToken) {
|
|||
|
byte[] result = null;
|
|||
|
try {
|
|||
|
Map<String, String> map = new HashMap<>();
|
|||
|
map.put("Cache-Control", "no-cache");
|
|||
|
map.put("x-accessToken", accessToken);
|
|||
|
String url = "https://yunzhijia.com/docrest/doc/user/downloadfile?fileId=" + fileId;
|
|||
|
result = doGet(url, map);
|
|||
|
} catch (Exception ex) {
|
|||
|
String message = ex.getMessage();
|
|||
|
throw new KDBizException(message);
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取下载地址文件流
|
|||
|
*
|
|||
|
* @param fileUrl
|
|||
|
* @return
|
|||
|
* @throws Exception
|
|||
|
*/
|
|||
|
public static byte[] getUrlFileData(String fileUrl) throws Exception {
|
|||
|
URL url = new URL(fileUrl);
|
|||
|
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
|
|||
|
httpConn.connect();
|
|||
|
InputStream cin = httpConn.getInputStream();
|
|||
|
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
|||
|
byte[] buffer = new byte[1024];
|
|||
|
int len = 0;
|
|||
|
while ((len = cin.read(buffer)) != -1) {
|
|||
|
outStream.write(buffer, 0, len);
|
|||
|
}
|
|||
|
cin.close();
|
|||
|
byte[] fileData = outStream.toByteArray();
|
|||
|
outStream.close();
|
|||
|
return fileData;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 二进制文件转MultipartFile
|
|||
|
*
|
|||
|
* @param name 文件名称
|
|||
|
* @param bytes 二进制流
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static MultipartFile getMultipartFile(String name, byte[] bytes) {
|
|||
|
MultipartFile mfile = null;
|
|||
|
ByteArrayInputStream in = null;
|
|||
|
try {
|
|||
|
in = new ByteArrayInputStream(bytes);
|
|||
|
FileItemFactory factory = new DiskFileItemFactory(16, null);
|
|||
|
FileItem fileItem = factory.createItem("mainFile", "text/plain", false, name);
|
|||
|
IOUtils.copy(new ByteArrayInputStream(bytes), fileItem.getOutputStream());
|
|||
|
mfile = new CommonsMultipartFile(fileItem);
|
|||
|
in.close();
|
|||
|
} catch (Exception e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
return mfile;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 以post方式调用第三方接口,以form-data 形式 发送 MultipartFile 文件数据
|
|||
|
*
|
|||
|
* @param url post请求url
|
|||
|
* @param fileParamName 文件参数名称
|
|||
|
* @param multipartFile 文件
|
|||
|
* @param paramMap 表单里其他参数
|
|||
|
* @param map 头参数
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String doPostFormData(String url, String fileParamName, MultipartFile multipartFile, Map<String, String> paramMap, Map<String, String> map) {
|
|||
|
// 创建Http实例
|
|||
|
CloseableHttpClient httpClient = HttpClients.createDefault();
|
|||
|
// 创建HttpPost实例
|
|||
|
HttpPost httpPost = new HttpPost(url);
|
|||
|
for (Map.Entry<String, String> entry : map.entrySet()) {
|
|||
|
httpPost.setHeader(entry.getKey(), entry.getValue());
|
|||
|
}
|
|||
|
// 请求参数配置
|
|||
|
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000)
|
|||
|
.setConnectionRequestTimeout(10000).build();
|
|||
|
httpPost.setConfig(requestConfig);
|
|||
|
|
|||
|
try {
|
|||
|
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
|||
|
builder.setCharset(java.nio.charset.Charset.forName("UTF-8"));
|
|||
|
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
|
|||
|
|
|||
|
String fileName = multipartFile.getOriginalFilename();
|
|||
|
// 文件流
|
|||
|
builder.addTextBody("bizkey", "cloudflow");
|
|||
|
builder.addBinaryBody(fileParamName, multipartFile.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);
|
|||
|
//表单中其他参数
|
|||
|
for (Map.Entry<String, String> entry : paramMap.entrySet()) {
|
|||
|
builder.addPart(entry.getKey(), new StringBody(entry.getValue(), ContentType.create("text/plain", Consts.UTF_8)));
|
|||
|
}
|
|||
|
|
|||
|
HttpEntity entity = builder.build();
|
|||
|
httpPost.setEntity(entity);
|
|||
|
HttpResponse response = httpClient.execute(httpPost);// 执行提交
|
|||
|
|
|||
|
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
|
|||
|
// 返回
|
|||
|
String res = EntityUtils.toString(response.getEntity(), java.nio.charset.Charset.forName("UTF-8"));
|
|||
|
return res;
|
|||
|
}
|
|||
|
|
|||
|
} catch (Exception e) {
|
|||
|
e.printStackTrace();
|
|||
|
System.out.println("调用HttpPost失败!" + e.toString());
|
|||
|
} finally {
|
|||
|
if (httpClient != null) {
|
|||
|
try {
|
|||
|
httpClient.close();
|
|||
|
} catch (IOException e) {
|
|||
|
System.out.println("关闭HttpPost连接失败!");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 发送 GET 请求(HTTP),K-V形式
|
|||
|
*
|
|||
|
* @param url
|
|||
|
* @param params
|
|||
|
* @return
|
|||
|
* @throws IOException
|
|||
|
*/
|
|||
|
public static byte[] doGet(String url, Map<String, String> params) throws IOException {
|
|||
|
byte[] result = null;
|
|||
|
CloseableHttpClient httpclient = HttpClients.createDefault();
|
|||
|
CloseableHttpResponse response = null;
|
|||
|
HttpEntity entity = null;
|
|||
|
try {
|
|||
|
HttpGet httpGet = new HttpGet(url);
|
|||
|
//表单中其他参数
|
|||
|
for (Map.Entry<String, String> entry : params.entrySet()) {
|
|||
|
httpGet.setHeader(entry.getKey(), entry.getValue());
|
|||
|
}
|
|||
|
response = httpclient.execute(httpGet);
|
|||
|
|
|||
|
entity = response.getEntity();
|
|||
|
if (entity != null) {
|
|||
|
InputStream instream = entity.getContent();
|
|||
|
result = org.apache.commons.io.IOUtils.toByteArray(instream);
|
|||
|
// result = org.apache.commons.io.IOUtils.toString(instream, "UTF-8");
|
|||
|
}
|
|||
|
} finally {
|
|||
|
// 最后别忘了关闭应该关闭的资源,适当的释放资源
|
|||
|
try {
|
|||
|
// 这个方法也可以把底层的流给关闭了
|
|||
|
EntityUtils.consume(entity);
|
|||
|
} catch (IOException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 字节转FileInputStream
|
|||
|
*
|
|||
|
* @param bytes
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static FileInputStream byteToFile(byte[] bytes, String fileName) {
|
|||
|
File file = new File(fileName);
|
|||
|
FileInputStream fileInputStream = null;
|
|||
|
try {
|
|||
|
OutputStream output = new FileOutputStream(file);
|
|||
|
BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);
|
|||
|
bufferedOutput.write(bytes);
|
|||
|
fileInputStream = new FileInputStream(file);
|
|||
|
file.deleteOnExit();
|
|||
|
return fileInputStream;
|
|||
|
} catch (FileNotFoundException e) {
|
|||
|
e.printStackTrace();
|
|||
|
} catch (IOException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
return fileInputStream;
|
|||
|
}
|
|||
|
|
|||
|
}
|