package com.celnet.datadump; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.PutObjectResult; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.celnet.datadump.entity.DataBatch; import com.celnet.datadump.entity.DataObject; import com.celnet.datadump.global.Const; import com.celnet.datadump.mapper.CustomMapper; import com.celnet.datadump.service.CommonService; import com.celnet.datadump.service.DataBatchService; import com.celnet.datadump.service.DataFieldService; import com.celnet.datadump.service.DataObjectService; import com.celnet.datadump.service.impl.DataFieldServiceImpl; import com.celnet.datadump.util.DataUtil; import com.google.gson.JsonObject; import com.sforce.soap.partner.*; import com.sforce.soap.partner.sobject.SObject; import com.sforce.ws.ConnectorConfig; import com.sforce.ws.util.Base64; import okhttp3.*; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.ContentDisposition; import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import org.springframework.test.context.junit4.SpringRunner; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.sql.Blob; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * @author Red * @description * @date 2022/09/23 */ public class DataDumpApplicationTests { public static final String SF_DATE_FORMAT2 = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; @Autowired private DataFieldService dataFieldService; @Autowired private DataBatchService dataBatchService; @Autowired private CustomMapper customMapper; @Autowired private CommonService commonService; @Autowired private DataObjectService dataObjectService; // @Test // public void run13() { // // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 // String endpoint = "http://crm-backup-oss.oss-cn-shenzhen.aliyuncs.com"; //// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 // String accessKeyId = "LTAI5tBEFLSJ6hccuDH7wKkv"; // String accessKeySecret = "Q3d6MjrWJCmwz1ND54hLnUCwYAWsDa"; // //// 创建OSSClient实例。 // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // // File doc = new File("/Users/zhuxuanfan/Downloads/a.pdf"); // PutObjectResult result = ossClient.putObject("crm-backup-oss", "a.pdf", doc); //// 关闭OSSClient。 // ossClient.shutdown(); // } // // @Test // public void run12() throws Exception { // File file = new File("/Users/zhuxuanfan/Downloads/a.txt"); // List lines = FileUtils.readLines(file, "UTF-8"); // StringBuilder sb = new StringBuilder(); // for (String line : lines) { // sb.append(line); // } // byte[] bytes = sb.toString().getBytes(); // byte[] decode = Base64.decode(bytes); //// System.out.println(sb); // File doc = new File("/Users/zhuxuanfan/Downloads/a.pdf"); // FileUtils.writeByteArrayToFile(doc, decode); // // } @Test public void run() throws Exception { String Username = "simone.xu@celnet.com.cn.leo.leodev2023"; String Password = "Leocrm2025"; String AuthEndpoint = "https://test.salesforce.com/services/Soap/u/56.0"; ConnectorConfig config = new ConnectorConfig(); config.setUsername(Username); config.setPassword(Password); config.setAuthEndpoint(AuthEndpoint); PartnerConnection partnerConnection = new PartnerConnection(config); System.out.println(partnerConnection.getUserInfo().getOrganizationId()); // String documentId = "069N0000001XyC7IAK"; // String contentVersionId = "0680k000001gFCjAAM"; // SObject[] accounts = new SObject[1]; // SObject account = new SObject(); // account.setType("ContentDocumentLink"); // account.setField("ContentDocumentId", "0690k000001cS6CAAU"); // account.setField("LinkedEntityId", "005N000000BaKeDIAV"); // accounts[0]=account; // // SaveResult[] saveResults = partnerConnection.create(accounts); // System.out.println(JSON.toJSONString(saveResults)); // QueryResult queryResult = partnerConnection.queryAll("SELECT Id, ContentDocumentId, IsDeleted FROM ContentVersion where Id = " + "'" + contentVersionId + "'"); // DescribeSObjectResult dsr = partnerConnection.describeSObject("ContentVersion"); // Field[] dsrFields = dsr.getFields(); // SObject[] records = queryResult.getRecords(); // JSONArray objects = DataUtil.toJsonArray(records, dsrFields); // System.out.println(JSON.toJSONString(objects)); // System.out.println(JSON.toJSONString(queryResult.getRecords()[0].getChild("LinkedEntity").getChild("Type").getValue())); // account.setField("CreatedDate", Calendar.getInstance()); //// Map CreatedByIdMap = customMapper.getById("new_id", "User", data.get(j-1).get("CreatedById").toString()); // account.setField("CreatedById", "005N000000BaKBhIAN"); // account.setField("AgentRating__c", "一级代理"); // accounts[0] = account; // SaveResult[] saveResults = partnerConnection.create(accounts); // System.out.println(JSON.toJSONString(saveResults)); // String SobjectName = "ApexClass"; // // DescribeGlobalResult result = partnerConnection.describeGlobal(); // DescribeGlobalSObjectResult[] Sobjects = result.getSobjects(); // List sobjectList = new ArrayList(); // List typeList = new ArrayList<>(); // typeList.add("History"); // typeList.add("Share"); // typeList.add("Tag"); // for(DescribeGlobalSObjectResult Sobject : Sobjects) { // if (typeList.contains(Sobject.getAssociateEntityType())) { // continue; // } // // if (Sobject.getCreateable()) { // sobjectList.add(Sobject.getName()); // } // // if (Sobject.getName().equals(SobjectName)) { // System.out.println("sobject: " + JSON.toJSONString(Sobject)); // } // } // System.out.println("Sobjects: " + JSON.toJSONString(sobjectList)); // System.out.println("Sobjects count num: " + JSON.toJSONString(sobjectList.size())); // List filedlist = new ArrayList(); // // DescribeSObjectResult[] dsrArray = PartnerConnection.describeSObjects(new String[]{SobjectName}); // DescribeSObjectResult dsr = dsrArray[0]; // System.out.println(JSON.toJSONString(dsr)); // for (Field field : dsr.getFields()) { // filedlist.add(field.getName()); // } // // String contentDocumentId = "069N0000002IlqDIAS"; // String sql = "SELECT Id, LinkedEntityId, LinkedEntity.type, ContentDocumentId, IsDeleted, SystemModstamp, ShareType, Visibility FROM ContentDocumentLink where ContentDocumentId = '" + contentDocumentId + "'"; // QueryResult queryResult = partnerConnection.query(sql); // // System.out.println(JSONObject.toJSONString(queryResult.getRecords()[0].getChild("LinkedEntity").getChild("Type").getValue())); } // // private static final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(1, // 1, // 0L, // TimeUnit.MILLISECONDS, // new LinkedBlockingQueue<>(), // new CustomizableThreadFactory("threadPoolExecutor-")); // // // @Test // public void test1() throws Exception { // Date endCreateDate = new Date(), weekLastDay; // Date startDate = DateUtils.parseDate("2016-01-01", "yyyy-MM-dd"); // do { // weekLastDay = DataUtil.getMonthLastDay(endCreateDate, startDate); // System.out.print("start: " + DateFormatUtils.format(startDate, "yyyy-MM-dd HH:mm:ss")); // System.out.println(", end: " + DateFormatUtils.format(weekLastDay, "yyyy-MM-dd HH:mm:ss")); // startDate = weekLastDay; // } while (weekLastDay.compareTo(endCreateDate) < 0); // // } // // // @Test // public void test2() throws Exception { // THREAD_POOL_EXECUTOR.submit(() -> { // try { // Thread.sleep(2000); // System.out.println(1); // } catch (InterruptedException e) { // throw new RuntimeException(e); // } // }); // THREAD_POOL_EXECUTOR.submit(() -> { // try { // Thread.sleep(2000); // System.out.println(2); // } catch (InterruptedException e) { // throw new RuntimeException(e); // } // }); // THREAD_POOL_EXECUTOR.purge(); // while (THREAD_POOL_EXECUTOR.getActiveCount() > 0) { // System.out.println("ActiveCount: " + THREAD_POOL_EXECUTOR.getActiveCount() + " count:" + THREAD_POOL_EXECUTOR.getQueue().size()); // try { // Thread.sleep(1000); // } catch (InterruptedException e) { // throw new RuntimeException(e); // } // // } // } // // // @Test // public void test() throws Exception { // String Username = "guoshisen@163.com"; // String Password = "celnet2024"; // String AuthEndpoint = "https://login.salesforce.com/services/Soap/u/56.0"; // // ConnectorConfig config = new ConnectorConfig(); // config.setUsername(Username); // config.setPassword(Password); // config.setAuthEndpoint(AuthEndpoint); // // PartnerConnection partnerConnection = new PartnerConnection(config); // String token = partnerConnection.getSessionHeader().getSessionId(); // System.out.println(token); // // File file = new File("/Users/mac/Downloads/6e146b3fda74b7ad20f1669c6f3043d8.jpeg"); // // 1.创建OkHttpClient对象 // OkHttpClient httpClient = new OkHttpClient(); // // // // 2.创建MultipartBody.Builder,并添加表单参数和文件参数 // MultipartBody.Builder builder = new MultipartBody.Builder(); // builder.setType(MultipartBody.FORM); // builder.addFormDataPart("entity_content", "{'Title':'文件上传test','PathOnClient':'6e146b3fda74b7ad20f1669c6f3043d8.jpeg'}"); // builder.addFormDataPart("VersionData", file.getName(), RequestBody.create(MediaType.parse("application/octet-stream"), file)); // // // 构建RequestBody对象 // RequestBody requestBody = builder.build(); // // // 3.创建HttpPost请求,并设置请求RequestBody和请求头,发送请求并处理响应 //// Request request = new Request.Builder() //// .url("https://devin-dev-ed.my.salesforce.com/services/data/v56.0/sobjects/ContentVersion") //// .post(requestBody) //// .addHeader("Content-Type", "multipart/form-data;boundary=\"--boundary_string\"") //// .addHeader("Authorization", "Bearer " + token) //// .addHeader("connection", "keep-alive") //// .build(); //// Response response = httpClient.newCall(request).execute(); //// System.out.println(JSON.toJSONString(response.body().string())); // } // @Test // public void tableRelation(){ // dataFieldService.tableRelation(); // } @Test public void uploadFile() throws Exception { // String Username = "guoshisen@163.com"; // String Password = "celnet2024"; // String AuthEndpoint = "https://login.salesforce.com/services/Soap/u/56.0"; String Username = "simone.xu@celnet.com.cn.leo.leodev2023"; String Password = "Leocrm2025"; String AuthEndpoint = "https://test.salesforce.com/services/Soap/u/56.0"; ConnectorConfig config = new ConnectorConfig(); config.setUsername(Username); config.setPassword(Password); config.setAuthEndpoint(AuthEndpoint); PartnerConnection partnerConnection = new PartnerConnection(config); String token = partnerConnection.getSessionHeader().getSessionId(); System.out.println(token); File file = new File("/Users/mac/Downloads/6e146b3fda74b7ad20f1669c6f3043d8.jpeg"); String fileName = file.getName(); HttpPost httpPost = new HttpPost("https://saiyi2022--leodev2023.sandbox.my.salesforce.com/services/data/v55.0/sobjects/Attachment"); httpPost.setHeader("Authorization", "Bearer " + token); httpPost.setHeader("connection", "keep-alive"); CloseableHttpResponse response = null; String respContent = null; JSONObject credentialsJsonParam = new JSONObject(); credentialsJsonParam.put("parentId", "0010k00001eVKlZAAW"); credentialsJsonParam.put("Name", fileName); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.addTextBody("data", credentialsJsonParam.toJSONString(), ContentType.APPLICATION_JSON); builder.addBinaryBody("Body", new FileInputStream(file), ContentType.APPLICATION_OCTET_STREAM, fileName); HttpEntity entity = builder.build(); httpPost.setEntity(entity); CloseableHttpClient httpClient = HttpClients.createDefault(); response = httpClient.execute(httpPost); try { if (response != null && response.getStatusLine() != null && response.getStatusLine().getStatusCode() < 400) { HttpEntity he = response.getEntity(); if (he != null) { respContent = EntityUtils.toString(he, "UTF-8"); } System.out.println("------------------------------"+JSONObject.toJSONString(respContent)); } else { throw new RuntimeException(); } } catch (Exception e) { // log.error("网络访问异常,请求url地址={},响应体={},error={}", url, response, e); throw new RuntimeException(); } finally { if (response != null) { response.close(); } } System.out.println(JSONObject.parseObject(respContent).get("id")); } @Test public void madeBatch() throws Exception { List list = dataObjectService.list(); Date now = new Date(); for (DataObject dataObject : list) { String apiName = dataObject.getName(); String label = dataObject.getLabel(); // 生成batch Date startDate = DataUtil.DEFAULT_BEGIN_DATE; // 取当天零点 作为最大时间 Date endCreateDate = DateUtils.parseDate(DateFormatUtils.format(now, "yyyy-MM-dd"), "yyyy-MM-dd"); Date lastDay = null; QueryWrapper delQw = new QueryWrapper<>(); delQw.eq("name", apiName); dataBatchService.remove(delQw); if (true && Const.BATCH_FILTERS.stream().noneMatch(t -> apiName.indexOf(t) > 0)) { // 匹配的不生成 DataBatch one = new DataBatch(); one.setFirstDbNum(0); one.setFirstSfNum(0); one.setDbNum(0); one.setSfNum(0); one.setName(apiName); one.setLabel(label); if (true) { do { lastDay = DataUtil.getWeekLastDay(endCreateDate, startDate); DataBatch dataBatch = one.clone(); dataBatch.setSyncStartDate(startDate); dataBatch.setSyncEndDate(lastDay); dataBatchService.save(dataBatch); startDate = lastDay; } while (lastDay.compareTo(endCreateDate) < 0); } else { // 没创建时间 开始结束时间为空 dataBatchService.save(one); } } } } }