diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/service/impl/SendEmailServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/service/impl/SendEmailServiceImpl.java index ba9b9bda..6ace28f9 100644 --- a/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/service/impl/SendEmailServiceImpl.java +++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/sendEmail/service/impl/SendEmailServiceImpl.java @@ -131,22 +131,22 @@ public class SendEmailServiceImpl extends BaseService i return BaseResult.getFailureMessageEntity("获取OA token失败"); } - for (int i = 0; i < files.size(); i++) { - String encodedFileName = URLEncoder.encode(files.get(i).getFilename(), StandardCharsets.UTF_8.name()); - String pdfUrl = "http://oa.sptzj.cn/seeyon/rest/attachment/file/"+files.get(i).getId()+"?fileName="+encodedFileName+"&token="+token; - logger.error("附件的url"+pdfUrl); - File file = getFile(pdfUrl,files.get(i).getFilename()); - if(file != null){ - try { + for (SendEmailEntity sendEmailEntity : files) { + String encodedFileName = URLEncoder.encode(sendEmailEntity.getFilename(), StandardCharsets.UTF_8.name()); + String pdfUrl = "http://oa.sptzj.cn/seeyon/rest/attachment/file/" + sendEmailEntity.getId() + "?fileName=" + encodedFileName + "&token=" + token; + logger.error("附件的url" + pdfUrl); + File file = getFile(pdfUrl, sendEmailEntity.getFilename()); + if (file != null) { + try { FileInputStream input = new FileInputStream(file); - MultipartFile multipartFile = new MockMultipartFile( + MultipartFile multipartFile = new MockMultipartFile( file.getName(), // 对应表单中的文件字段名 file.getName(), // 原始文件名 - files.get(i).getContentType(), // 或根据文件类型指定 MIME 类型 + sendEmailEntity.getContentType(), // 或根据文件类型指定 MIME 类型 input ); attachments.add(multipartFile); - }catch (Exception e){ + } catch (Exception e) { return BaseResult.getFailureMessageEntity("发送邮件失败"); } } @@ -154,12 +154,16 @@ public class SendEmailServiceImpl extends BaseService i } if(attachments != null && attachments.size() > 0){ - emailUtil.sendHtmlAndFileMessage(sendEmail,subject, htmls,attachments); + emailUtil.sendHtmlAndFileMessage("1",sendEmail,subject, htmls,attachments); + emailUtil.sendHtmlAndFileMessage("2",sendEmail,subject, htmls,attachments); }else { - emailUtil.sendHtmlMessage(sendEmail,subject, htmls); + emailUtil.sendHtmlMessage("1",sendEmail,subject, htmls); + emailUtil.sendHtmlMessage("2",sendEmail,subject, htmls); } return BaseResult.getSuccessMessageEntity("发送邮件成功"); }catch (Exception e){ + logger.error(e.getMessage()); + e.printStackTrace(); return BaseResult.getFailureMessageEntity("发送邮件失败"); } } @@ -228,7 +232,7 @@ public class SendEmailServiceImpl extends BaseService i **/ private String getSendData(JSONObject mainData, JSONArray detailArray) throws ParseException { StringBuffer sb = new StringBuffer(); - + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 拼接主容器div sb.append("
"); @@ -237,12 +241,16 @@ public class SendEmailServiceImpl extends BaseService i sb.append("

"+mainData.getOrDefault("field0016","")+"采购单

"); sb.append("
"); sb.append(""); - + String field0004str = ""; + if(mainData.getString("field0004") != null){ + Date field0004 = new Date(mainData.getLong("field0004")); + field0004str = sdf.format(field0004); + } // 拼接基础信息区域 sb.append("
"); sb.append("
"); sb.append(" 申请日期:"); - sb.append(" "+mainData.getOrDefault("field0004","")+""); + sb.append(" "+field0004str+""); sb.append("
"); sb.append("
"); sb.append(" 单据编号:"); @@ -332,19 +340,24 @@ public class SendEmailServiceImpl extends BaseService i if (detailArray != null && detailArray.size() > 0) { for (int i = 0; i < detailArray.size(); i++) { sb.append(" "); - sb.append(" "+mainData.getOrDefault("field0005","")+""); - sb.append(" "+mainData.getOrDefault("field0006","")+""); - sb.append(" "+mainData.getOrDefault("field0007","")+""); - sb.append(" "+mainData.getOrDefault("field0008","")+""); - sb.append(" "+mainData.getOrDefault("field0009","")+""); - sb.append(" "+mainData.getOrDefault("field0010","")+""); - sb.append(" "+mainData.getOrDefault("field0011","")+""); - sb.append(" "+mainData.getOrDefault("field0012","")+""); - sb.append(" "+mainData.getOrDefault("field0013","")+""); - sb.append(" "+mainData.getOrDefault("field0014","")+""); - sb.append(" "+mainData.getOrDefault("field0017","")+""); - sb.append(" "+mainData.getOrDefault("field0018","")+""); - sb.append(" "+mainData.getOrDefault("field0019","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0005","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0006","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0007","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0008","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0009","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0010","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0011","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0012","")+""); + String field0013str = ""; + if(detailArray.getJSONObject(i).getString("field0013") != null){ + Date field0013 = new Date(detailArray.getJSONObject(i).getLong("field0013")); + field0013str = sdf.format(field0013); + } + sb.append(" "+field0013str+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0014","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0017","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0018","")+""); + sb.append(" "+detailArray.getJSONObject(i).getOrDefault("field0019","")+""); sb.append(" "); } }else { @@ -372,11 +385,6 @@ public class SendEmailServiceImpl extends BaseService i // 闭合主容器div sb.append("
"); - if (detailArray != null && detailArray.size() > 0) { - for (int i = 0; i < detailArray.size(); i++) { - - } - } return sb.toString(); } diff --git a/base-buildpackage/src/main/resources/application-llg.yml b/base-buildpackage/src/main/resources/application-llg.yml index 1dfec49b..9dade429 100644 --- a/base-buildpackage/src/main/resources/application-llg.yml +++ b/base-buildpackage/src/main/resources/application-llg.yml @@ -9,18 +9,28 @@ logging: path: /Users/apple/Desktop/log/local spring: mail: - host: smtp.qq.com - port: 465 - username: 957075182@qq.com - password: lcmgbgaxuhsbbbei + first: + host: smtp.sptchina.cn + port: 25 + username: mro@sptchina.cn + password: VeaQDO9zjuYpGc1i + second: + host: smtp.qq.com + port: 587 + username: 957075182@qq.com + password: lcmgbgaxuhsbbbei + default-encoding: UTF-8 properties: mail: + mime: + charset: UTF-8 smtp: socketFactory: class: javax.net.ssl.SSLSocketFactory auth: true ssl: enable: true + protocol: TLSv1.2 data: mongodb: # host: 192.168.2.237 diff --git a/base-buildpackage/src/main/resources/application-zhouju.yml b/base-buildpackage/src/main/resources/application-zhouju.yml index b28904b0..db3f2b0f 100644 --- a/base-buildpackage/src/main/resources/application-zhouju.yml +++ b/base-buildpackage/src/main/resources/application-zhouju.yml @@ -8,6 +8,23 @@ logging: # 日志保存路径 path: D:\yongansystem\log\zs spring: + mail: + host: smtp.qq.com + port: 587 + username: 957075182@qq.com + password: lcmgbgaxuhsbbbei + default-encoding: UTF-8 + properties: + mail: + mime: + charset: UTF-8 + smtp: + socketFactory: + class: javax.net.ssl.SSLSocketFactory + auth: true + ssl: + enable: true + protocol: TLSv1.2 data: mongodb: # host: 192.168.2.237 diff --git a/base-buildpackage/src/test/java/com/hzya/frame/temButtom.java b/base-buildpackage/src/test/java/com/hzya/frame/temButtom.java index 34b132e5..405f1e74 100644 --- a/base-buildpackage/src/test/java/com/hzya/frame/temButtom.java +++ b/base-buildpackage/src/test/java/com/hzya/frame/temButtom.java @@ -4,6 +4,7 @@ import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.hzya.frame.plugin.sendEmail.service.ISendEmailService; import com.hzya.frame.plugin.zjmaterielsynchronizationevent.service.IZjMaterielSynchronizationEventService; import com.hzya.frame.util.AESUtil; import com.hzya.frame.web.entity.BaseResult; @@ -47,1163 +48,18 @@ import java.util.regex.Pattern; * @Author llg * Date 2023/7/16 8:18 上午 */ -//@RunWith(SpringRunner.class) -//@SpringBootTest(classes = {WebappApplication.class}) +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {WebappApplication.class}) public class temButtom { - - //@Test - //public void test01() { - // String maxnum = "89988"; - // - // String formattedNum = null; - // char firstChar = Character.toUpperCase(maxnum.charAt(0)); - // if("99999".equals(maxnum)){ - // maxnum = "A0000"; - // formattedNum = "A0000"; - // }else if(firstChar >= 'A' && firstChar <= 'Z'){ - // String hm = maxnum.substring(maxnum.length() - 4); - // if("9999".equals(hm)){ - // hm = "0000"; - // firstChar++; - // }else { - // hm = String.format("%04d", Integer.valueOf(hm)+1); - // } - // maxnum = firstChar+hm; - // formattedNum = firstChar+hm; - // }else { - // formattedNum = String.format("%05d", Integer.valueOf(maxnum)+1); - // maxnum = String.valueOf(Integer.valueOf(maxnum)+1); - // } - // - // System.out.println(maxnum); - // System.out.println(formattedNum); - // - // - // - // - // String regex = "[\uFF00-\uFF5D\uFF5F-\uFFEF]"; - // // 编译正则表达式 - // Pattern pattern = Pattern.compile(regex); - // if(pattern.matcher("测试-32位,RL78,128KB,12KB,1.6-5.5V,-40 ~85°C,民用,LQFP-80;R5F100MGAFA(瑞萨)").find()){ - // System.out.println("1231231"); - // - // } - // String a = AESUtil.encrypt("hzya1314"); - // System.out.println(a); - // String b = AESUtil.decrypt("62e4295b615a30dbf3b8ee96f41c820b"); - // System.out.println(b); - //} - -// -// @Test -// public void test02() { -//// 1056162015172640840 -7858803986346327947 3178176833471791293 合同评审-待办测试(bdmanager 2024-10-22 16:45) 7743552636545550897 bdmanager 18058147870 pending start success 新增成功! -//// success 更新待办为已办成功! -//// task7803207f54ff047d6008dcce31c2628f 新增成功! -//// 2024-10-24 2024-10-24 -// -// String phone ="19357235324"; -// String taskid ="task8b0c7ca72439bc9b0c1c89e8866c8275"; -// //token -// Map headers = new HashMap<>(); -// String token ="https://oapi.dingtalk.com/gettoken?appkey=dingxewtjaserj292ggu&appsecret=DuRw6EEEvhGXfr6Q8wN_x4025qKjrffIGCXF9KeCKKIID-LVSsR6_8KWMei6sug1"; -// String body = sendGet(token,headers); -// JSONObject tokenobject = JSONObject.parseObject(body); -// -// //钉钉id -// headers = new HashMap<>(); -// //https://oapi.dingtalk.com/user/get_by_mobile?access_token=9abd3996cb103ba48dd8c69fea5473e7&mobile=15700100840 -// String ddid ="https://oapi.dingtalk.com/user/get_by_mobile?access_token="+tokenobject.get("access_token")+"&mobile="+phone; -// String ddidbody = sendGet(ddid,headers); -// JSONObject ddidobject = JSONObject.parseObject(ddidbody); -// -// //人员id -// headers = new HashMap<>(); -// //https://oapi.dingtalk.com/user/get?userid=111336474727636213&access_token=3d21a6614fb037a98542a537336e8149 -// String userid ="https://oapi.dingtalk.com/user/get?userid="+ddidobject.get("userid")+"&access_token="+tokenobject.get("access_token"); -// String useridbody = sendGet(userid,headers); -// JSONObject useridobject = JSONObject.parseObject(useridbody); -// -// -// -// CloseableHttpClient httpClient = HttpClients.createDefault(); -// HttpPut httpPut = new HttpPut("https://api.dingtalk.com/v1.0/todo/users/"+useridobject.get("unionid")+"/tasks/"+taskid); -// RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000).setConnectionRequestTimeout(35000).setSocketTimeout(60000).build(); -// httpPut.setConfig(requestConfig); -// httpPut.setHeader("Content-type", "application/json"); -// httpPut.setHeader("x-acs-dingtalk-access-token", tokenobject.getString("access_token")); -// Map dataMap = new HashMap(); -// dataMap.put("done", true); -// CloseableHttpResponse httpResponse = null; -// -// try { -// httpPut.setEntity(new StringEntity("{\"done\": true}")); -// httpResponse = httpClient.execute(httpPut); -// HttpEntity entity = httpResponse.getEntity(); -// String results = EntityUtils.toString(entity); -// System.out.println(results); -// } catch (Exception var15) { -// } finally { -// try { -// httpResponse.close(); -// httpClient.close(); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// } -// -// } - - //private String sendGet(String url, Map headers) { - // HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); - // // HttpClient - // CloseableHttpClient closeableHttpClient = httpClientBuilder.disableCookieManagement().build(); - // HttpGet get = new HttpGet(url.toString()); - // CloseableHttpResponse response = null; - // - // RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(60000).build(); - // get.setConfig(requestConfig);//设置请求参数【超时时间】 - // if (headers != null && headers.size() > 0) { - // for (String key : headers.keySet()) { - // get.setHeader(key, headers.get(key)); - // } - // } - // StringBuilder body = new StringBuilder(); - // - // try { - // - // response = closeableHttpClient.execute(get); - // HttpEntity entity = response.getEntity(); - // body.append(EntityUtils.toString(entity,"UTF-8")); - // } catch (Exception e) { - // body.append(e.getMessage()); - // } finally { - // try { - // // 关闭响应对象 - // if (response != null) { - // response.close(); - // } - // // 关闭响应对象 - // if (closeableHttpClient != null) { - // closeableHttpClient.close(); - // } - // } catch (IOException e) { - // e.printStackTrace(); - // } - // } - // return body.toString(); - //} - - //@Resource - //private IZjMaterielSynchronizationEventService zjMaterielSynchronizationEventService; + @Autowired + private ISendEmailService sendEmailService; @Test - public void wl() { - String url = "http://newmiptest.gtcloud.cn/api/SyncVoucherSerialInfo"; - String bodys = "{\"Data\":[{\"amount\":\"150\",\"cwOrganizeCode\":\"32517\",\"cwOrganizeName\":\"宁波北仑绿城未来社区置业有限公司\",\"flowDate\":\"2025-05-22 09:43:13\",\"nCGGUID\":\"T8ca29e7619d6014323943401115e8a2ce67\",\"otherBankAccount\":\"33150198367900006927\",\"otherBankName\":\"交通银行上海奉贤支行\",\"otherUnit\":\"绿城中国控股有限公司\",\"ourBankAccount\":\"331066140018170056641\",\"ourBankName\":\"交通银行杭州杭大路支行\",\"remark\":\"正常业务\"}]}"; - try { - connectXml(url,bodys); - } catch (IOException e) { - e.printStackTrace(); - } + public void test01() { + + String str = "{\"jsonStr\":\"{\\\"affairId\\\":\\\"\\\",\\\"businessDataStr\\\":\\\"{\\\\\\\"formmain_1233\\\\\\\":{\\\\\\\"field0016\\\\\\\":\\\\\\\"杭州汇弘电子科技有限公司\\\\\\\",\\\\\\\"id\\\\\\\":-6433548471442979179,\\\\\\\"state\\\\\\\":1,\\\\\\\"modify_member_id\\\\\\\":\\\\\\\"7813106765145851523\\\\\\\",\\\\\\\"start_date\\\\\\\":\\\\\\\"2025-07-16 14:34:57.533\\\\\\\",\\\\\\\"field0020\\\\\\\":\\\\\\\"周老板\\\\\\\",\\\\\\\"field0021\\\\\\\":\\\\\\\"12334578798\\\\\\\",\\\\\\\"field0022\\\\\\\":\\\\\\\"杭州洲钜电子科技有限公司\\\\\\\",\\\\\\\"field0034\\\\\\\":\\\\\\\"957075182@qq.com\\\\\\\",\\\\\\\"ratifyflag\\\\\\\":0,\\\\\\\"field0001\\\\\\\":\\\\\\\"CGDD20250716010\\\\\\\",\\\\\\\"field0023\\\\\\\":\\\\\\\"李晴\\\\\\\",\\\\\\\"field0002\\\\\\\":\\\\\\\"7813106765145851523\\\\\\\",\\\\\\\"field0024\\\\\\\":\\\\\\\"13957253790\\\\\\\",\\\\\\\"field0003\\\\\\\":\\\\\\\"5142155373390415157\\\\\\\",\\\\\\\"field0025\\\\\\\":\\\\\\\"安吉\\\\\\\",\\\\\\\"field0004\\\\\\\":1752595200000,\\\\\\\"field0026\\\\\\\":\\\\\\\"荆海洋\\\\\\\",\\\\\\\"field0027\\\\\\\":\\\\\\\"12334578798\\\\\\\",\\\\\\\"sort\\\\\\\":0,\\\\\\\"ratify_member_id\\\\\\\":\\\\\\\"0\\\\\\\",\\\\\\\"start_member_id\\\\\\\":\\\\\\\"7813106765145851523\\\\\\\",\\\\\\\"approve_member_id\\\\\\\":\\\\\\\"0\\\\\\\",\\\\\\\"finishedflag\\\\\\\":1,\\\\\\\"modify_date\\\\\\\":\\\\\\\"2025-07-16 14:35:28.11\\\\\\\"},\\\\\\\"formson_1234\\\\\\\":[{\\\\\\\"field0031\\\\\\\":1,\\\\\\\"field0011\\\\\\\":0.00,\\\\\\\"field0012\\\\\\\":0.00,\\\\\\\"formmain_id\\\\\\\":-6433548471442979179,\\\\\\\"field0013\\\\\\\":1753113600000,\\\\\\\"field0014\\\\\\\":\\\\\\\"金属\\\\\\\",\\\\\\\"field0005\\\\\\\":1,\\\\\\\"sort\\\\\\\":1,\\\\\\\"field0030\\\\\\\":2646044005904238719,\\\\\\\"field0006\\\\\\\":\\\\\\\"20102000001\\\\\\\",\\\\\\\"field0017\\\\\\\":13.00,\\\\\\\"field0007\\\\\\\":\\\\\\\"电批头\\\\\\\",\\\\\\\"field0018\\\\\\\":\\\\\\\"人民币\\\\\\\",\\\\\\\"field0029\\\\\\\":\\\\\\\"CGXQ20250716064\\\\\\\",\\\\\\\"field0008\\\\\\\":\\\\\\\"φ5*120*1#\\\\\\\",\\\\\\\"id\\\\\\\":-1755040091381609856,\\\\\\\"field0009\\\\\\\":10}]}\\\",\\\"formApp\\\":\\\"-3246504140910149020\\\",\\\"currentActivityId\\\":\\\"\\\",\\\"eventType\\\":\\\"onBeforeFinishWorkitem\\\",\\\"id\\\":\\\"-6433548471442979179\\\"}\",\"eventType\":\"onBeforeFinishWorkitem\",\"formAppId\":\"-3246504140910149020\"}"; + JSONObject requestJson = JSONObject.parseObject(str); + sendEmailService.sendEmail(requestJson); } - public void connectXml(String urlStr,String requestBody) throws IOException { - try { - // 初始请求URL(可能会重定向) - URL url = new URL(urlStr); - - - // 手动处理重定向(最多5次,防止循环) - int maxRedirects = 5; - int redirectCount = 0; - URL currentUrl = url; - - while (true) { - System.out.println("\n--- 请求 #" + (redirectCount + 1) + " ---"); - System.out.println("请求URL: " + currentUrl); - - // 创建连接 - HttpURLConnection conn = (HttpURLConnection) currentUrl.openConnection(); - - // 设置请求方法(保持与原始请求一致) - conn.setRequestMethod("POST"); - - // 设置通用请求头 - conn.setRequestProperty("Content-Type", "application/json"); - conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Java client)"); - conn.setRequestProperty("Accept", "application/json"); - - // 启用输出流(发送请求体)和输入流(接收响应) - conn.setDoOutput(true); - conn.setDoInput(true); - - // 设置超时时间 - conn.setConnectTimeout(5000); - conn.setReadTimeout(5000); - - // 写入请求体数据(每次重定向都重新发送相同的请求体) - try (OutputStream os = conn.getOutputStream()) { - byte[] input = requestBody.getBytes(StandardCharsets.UTF_8); - os.write(input, 0, input.length); - System.out.println("发送请求体: " + requestBody); - } - - // 获取响应状态码 - int responseCode = conn.getResponseCode(); - System.out.println("响应状态码: " + responseCode); - - // 检查是否需要重定向 - if (responseCode == HttpURLConnection.HTTP_MOVED_PERM || // 301 - responseCode == HttpURLConnection.HTTP_MOVED_TEMP) { // 302 - - if (redirectCount >= maxRedirects) { - throw new IOException("重定向次数过多,可能存在循环"); - } - - // 获取重定向的新URL - String location = conn.getHeaderField("Location"); - System.out.println("重定向到: " + location); - - // 处理相对URL(如果Location头返回的是相对路径) - currentUrl = new URL(currentUrl, location); - - // 关闭当前连接 - conn.disconnect(); - - // 增加重定向计数并继续下一次请求 - redirectCount++; - continue; - } - - // 处理非重定向响应 - System.out.println("响应头:"); - Map> headers = conn.getHeaderFields(); - for (Map.Entry> entry : headers.entrySet()) { - System.out.println(entry.getKey() + ": " + entry.getValue()); - } - - // 读取响应内容 - try (BufferedReader reader = new BufferedReader( - new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { - StringBuilder response = new StringBuilder(); - String line; - while ((line = reader.readLine()) != null) { - response.append(line); - } - System.out.println("\n响应内容:\n" + response.toString()); - } catch (IOException e) { - // 处理错误响应 - try (BufferedReader errorReader = new BufferedReader( - new InputStreamReader(conn.getErrorStream()))) { - StringBuilder errorResponse = new StringBuilder(); - String line; - while ((line = errorReader.readLine()) != null) { - errorResponse.append(line); - } - System.out.println("\n错误响应内容:\n" + errorResponse.toString()); - } - } - - // 完成请求,退出循环 - break; - } - - } catch (IOException e) { - System.err.println("HTTP请求出错: " + e.getMessage()); - e.printStackTrace(); - }try { - // 初始请求URL(可能会重定向) - URL url = new URL(urlStr); - - - // 手动处理重定向(最多5次,防止循环) - int maxRedirects = 5; - int redirectCount = 0; - URL currentUrl = url; - - while (true) { - System.out.println("\n--- 请求 #" + (redirectCount + 1) + " ---"); - System.out.println("请求URL: " + currentUrl); - - // 创建连接 - HttpURLConnection conn = (HttpURLConnection) currentUrl.openConnection(); - - // 设置请求方法(保持与原始请求一致) - conn.setRequestMethod("POST"); - - // 设置通用请求头 - conn.setRequestProperty("Content-Type", "application/json"); - conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Java client)"); - conn.setRequestProperty("Accept", "application/json"); - - // 启用输出流(发送请求体)和输入流(接收响应) - conn.setDoOutput(true); - conn.setDoInput(true); - - // 设置超时时间 - conn.setConnectTimeout(5000); - conn.setReadTimeout(5000); - - // 写入请求体数据(每次重定向都重新发送相同的请求体) - try (OutputStream os = conn.getOutputStream()) { - byte[] input = requestBody.getBytes(StandardCharsets.UTF_8); - os.write(input, 0, input.length); - System.out.println("发送请求体: " + requestBody); - } - - // 获取响应状态码 - int responseCode = conn.getResponseCode(); - System.out.println("响应状态码: " + responseCode); - - // 检查是否需要重定向 - if (responseCode == HttpURLConnection.HTTP_MOVED_PERM || // 301 - responseCode == HttpURLConnection.HTTP_MOVED_TEMP) { // 302 - - if (redirectCount >= maxRedirects) { - throw new IOException("重定向次数过多,可能存在循环"); - } - - // 获取重定向的新URL - String location = conn.getHeaderField("Location"); - System.out.println("重定向到: " + location); - - // 处理相对URL(如果Location头返回的是相对路径) - currentUrl = new URL(currentUrl, location); - - // 关闭当前连接 - conn.disconnect(); - - // 增加重定向计数并继续下一次请求 - redirectCount++; - continue; - } - - // 处理非重定向响应 - System.out.println("响应头:"); - Map> headers = conn.getHeaderFields(); - for (Map.Entry> entry : headers.entrySet()) { - System.out.println(entry.getKey() + ": " + entry.getValue()); - } - - // 读取响应内容 - try (BufferedReader reader = new BufferedReader( - new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { - StringBuilder response = new StringBuilder(); - String line; - while ((line = reader.readLine()) != null) { - response.append(line); - } - System.out.println("\n响应内容:\n" + response.toString()); - } catch (IOException e) { - // 处理错误响应 - try (BufferedReader errorReader = new BufferedReader( - new InputStreamReader(conn.getErrorStream()))) { - StringBuilder errorResponse = new StringBuilder(); - String line; - while ((line = errorReader.readLine()) != null) { - errorResponse.append(line); - } - System.out.println("\n错误响应内容:\n" + errorResponse.toString()); - } - } - - // 完成请求,退出循环 - break; - } - - } catch (IOException e) { - System.err.println("HTTP请求出错: " + e.getMessage()); - e.printStackTrace(); - } - } - @Test - public void sql1() { - Map map = new HashMap(); - //表明 类id(可能系统不一样类ID不一样) - map.put("ar_recbill","ca162462-078f-46e8-af2d-05c4580c8af7"); - map.put("ar_recitem","daa74132-56df-48c5-beba-b27b669ae088"); - map.put("ar_gatherbill","53e7cc81-a016-4d64-973b-d61fd647c7a2"); - map.put("ar_gatheritem","f559bf45-a0b1-4261-8ada-62245b3ca809"); - map.put("ap_paybill","6ec38eda-3752-462a-bb29-2add1625f011"); - map.put("ap_payitem","c44b4d2b-e460-47aa-883e-90c10d07f309"); - map.put("ap_payablebill","6c8584f4-21d4-4ec9-9eac-96ad472acf2f"); - map.put("ap_payableitem","091a5f27-e8b7-4538-912d-221730d0ba1c"); - JSONArray jsonArray = new JSONArray(); - //JSONObject js1 = new JSONObject();js1.put("table","ap_paybill");js1.put("start",101);js1.put("end",130);jsonArray.add(js1); - JSONObject js2 = new JSONObject();js2.put("table","ar_recbill");js2.put("start",111);js2.put("end",130);jsonArray.add(js2); - //JSONObject js3 = new JSONObject();js3.put("table","ar_gatheritem");js3.put("start",81);js3.put("end",130);jsonArray.add(js3); - JSONObject js4 = new JSONObject();js4.put("table","ar_gatherbill");js4.put("start",111);js4.put("end",130);jsonArray.add(js4); - //JSONObject js5 = new JSONObject();js5.put("table","ap_payablebill");js5.put("start",101);js5.put("end",130);jsonArray.add(js5); - //JSONObject js6 = new JSONObject();js6.put("table","ap_payableitem");js6.put("start",81);js6.put("end",100);jsonArray.add(js6); - //JSONObject js7 = new JSONObject();js7.put("table","ar_recitem");js7.put("start",81);js7.put("end",130);jsonArray.add(js7); - - - StringBuffer sql = new StringBuffer(); - - for (int a = 0; a < jsonArray.size(); a++) { - sql.append("\n").append("\n").append("-- ").append(jsonArray.getJSONObject(a).getString("table")); - Integer start = jsonArray.getJSONObject(a).getInteger("start"); - Integer end = jsonArray.getJSONObject(a).getInteger("end"); - String filedname1 = "def"; //新加字段名称 - String filedremark1 = "自定义项"; //字段备注名称 - String tablename = jsonArray.getJSONObject(a).getString("table"); //表名 - String CLASSID = map.get(tablename); //类名称 通过 SELECT CLASSID from md_ormap where TABLEID = 'ar_gatherbill' 获取 修改对应表名 - for (Integer i = start; i <= end; i++) { - String filedname = filedname1+i; //新加字段名称 - String filedremark = filedremark1+i; //字段备注名称 - String id = UUID.randomUUID().toString(); - StringBuffer createsql = new StringBuffer(); - createsql.append("alter table "+tablename+" add ("+filedname+" varchar2(101) default '~');"); - StringBuffer md_ormap = new StringBuffer(); - md_ormap.append("INSERT INTO md_ormap (\"ATTRIBUTEID\", \"CLASSID\", \"COLUMNID\", \"DR\", \"TABLEID\", \"TS\") VALUES ('"+id+"', '"+CLASSID+"', '"+tablename+"@@@"+filedname+"', NULL, '"+tablename+"', '2025-05-09 11:44:57');"); - StringBuffer md_column = new StringBuffer(); - md_column.append("INSERT INTO md_column (\"COLUMNLENGTH\", \"COLUMNSEQUENCE\", \"COLUMNTYPE\", \"CREATETIME\", \"CREATOR\", \"DEFAULTVALUE\", \"DESCRIPTION\", \"DISPLAYNAME\", \"DR\", \"FORLOCALE\", \"GROUPID\", \"HELP\", \"ID\", \"IDENTITIED\", \"INCREMENTSEED\", \"INCREMENTSTEP\", \"ISACTIVE\", \"MODIFIER\", \"MODIFYTIME\", \"NAME\", \"NULLABLE\", \"PKEY\", \"PRECISE\", \"RESID\", \"SQLDATETYPE\", \"TABLEID\", \"TS\", \"VERSIONTYPE\") VALUES ('101', '186', '0', NULL, NULL, NULL, NULL, '"+filedremark+"', NULL, 'N', NULL, NULL, '"+tablename+"@@@"+filedname+"', NULL, NULL, NULL, 'Y', NULL, NULL, '"+filedname+"', 'Y', 'N', '0', NULL, 'varchar', '"+tablename+"', '2025-05-09 11:44:57', '0');"); - StringBuffer md_property = new StringBuffer(); - md_property.append("INSERT INTO md_property (\"ACCESSORCLASSNAME\", \"ACCESSPOWER\", \"ACCESSPOWERGROUP\", \"ATTRLENGTH\", \"ATTRMAXVALUE\", \"ATTRMINVALUE\", \"ATTRSEQUENCE\", \"CALCULATION\", \"CLASSID\", \"CREATEINDUSTRY\", \"CREATETIME\", \"CREATOR\", \"CUSTOMATTR\", \"DATATYPE\", \"DATATYPESTYLE\", \"DEFAULTVALUE\", \"DESCRIPTION\", \"DISPLAYNAME\", \"DR\", \"DYNAMICATTR\", \"DYNAMICTABLE\", \"FIXEDLENGTH\", \"HELP\", \"HIDED\", \"ID\", \"INDUSTRY\", \"ISACTIVE\", \"ISAUTHEN\", \"MODIFIER\", \"MODIFYTIME\", \"NAME\", \"NOTSERIALIZE\", \"NULLABLE\", \"PRECISE\", \"READONLY\", \"REFMODELNAME\", \"RESID\", \"TS\", \"VERSIONTYPE\", \"VISIBILITY\") VALUES (NULL, 'N', NULL, '101', NULL, NULL, '186', 'N', '"+CLASSID+"', '0', NULL, NULL, 'Y', 'BS000010000100001056', '300', NULL, NULL, '"+filedremark+"', NULL, 'N', NULL, 'N', NULL, 'N', '"+id+"', '0', 'Y', NULL, NULL, NULL, '"+filedname+"', 'N', 'Y', '0', 'N', NULL, NULL, '2019-12-09 23:44:57', '0', '0');"); - sql.append("\n").append(createsql).append("\n").append(md_ormap).append("\n").append(md_column).append("\n").append(md_property).append("\n").append("\n"); - } - } - - System.out.println(sql.toString()); - - - - } - - @Test - public void sql() { - //字段长度 - String fileCD = "2000"; - Map map = new HashMap(); - - //表明 类id(可能系统不一样类ID不一样) - //类ID通过:SELECT CLASSID from md_ormap where TABLEID = 'ar_gatherbill' - map.put("cmp_paybill","419518ce-fdec-4869-b5f4-079e8ced2868"); - JSONArray jsonArray = new JSONArray(); - JSONObject js = new JSONObject(); - js.put("table","cmp_paybill");//表 - js.put("start",101);//自定义字段开始 生成语句包含这个数字的自定义项 - js.put("end",110);//自定义字段结束 生成语句包含这个数字的自定义项 - //通过sql查询获取 SELECT MAX(COLUMNSEQUENCE) from md_column where TABLEID = 'cmp_paybill' - js.put("maxpaixu",300);//最大排序 - jsonArray.add(js); - - StringBuffer sql = new StringBuffer(); - - for (int a = 0; a < jsonArray.size(); a++) { - sql.append("\n").append("\n").append("-- ").append(jsonArray.getJSONObject(a).getString("table")); - Integer start = jsonArray.getJSONObject(a).getInteger("start"); - Integer end = jsonArray.getJSONObject(a).getInteger("end"); - Integer maxpaixu = jsonArray.getJSONObject(a).getInteger("maxpaixu"); - String filedname1 = "def"; //新加字段名称 - String filedremark1 = "自定义项"; //字段备注名称 - String tablename = jsonArray.getJSONObject(a).getString("table"); //表名 - String CLASSID = map.get(tablename); //类名称 - for (Integer i = start; i <= end; i++) { - maxpaixu++; - String filedname = filedname1+i; //新加字段名称 - String filedremark = filedremark1+i; //字段备注名称 - String id = UUID.randomUUID().toString(); - StringBuffer createsql = new StringBuffer(); - createsql.append("alter table "+tablename+" add ("+filedname+" varchar2("+fileCD+"));"); - StringBuffer md_ormap = new StringBuffer(); - md_ormap.append("INSERT INTO md_ormap (\"ATTRIBUTEID\", \"CLASSID\", \"COLUMNID\", \"DR\", \"TABLEID\", \"TS\") VALUES ('"+id+"', '"+CLASSID+"', '"+tablename+"@@@"+filedname+"', NULL, '"+tablename+"', '2025-05-09 11:44:57');"); - StringBuffer md_column = new StringBuffer(); - md_column.append("INSERT INTO md_column (\"COLUMNLENGTH\", \"COLUMNSEQUENCE\", \"COLUMNTYPE\", \"CREATETIME\", \"CREATOR\", \"DEFAULTVALUE\", \"DESCRIPTION\", \"DISPLAYNAME\", \"DR\", \"FORLOCALE\", \"GROUPID\", \"HELP\", \"ID\", \"IDENTITIED\", \"INCREMENTSEED\", \"INCREMENTSTEP\", \"ISACTIVE\", \"MODIFIER\", \"MODIFYTIME\", \"NAME\", \"NULLABLE\", \"PKEY\", \"PRECISE\", \"RESID\", \"SQLDATETYPE\", \"TABLEID\", \"TS\", \"VERSIONTYPE\") VALUES ('"+fileCD+"', '"+maxpaixu+"', '0', NULL, NULL, NULL, NULL, '"+filedremark+"', NULL, 'N', NULL, NULL, '"+tablename+"@@@"+filedname+"', NULL, NULL, NULL, 'Y', NULL, NULL, '"+filedname+"', 'Y', 'N', '0', NULL, 'varchar', '"+tablename+"', '2025-05-09 11:44:57', '0');"); - StringBuffer md_property = new StringBuffer(); - md_property.append("INSERT INTO md_property (\"ACCESSORCLASSNAME\", \"ACCESSPOWER\", \"ACCESSPOWERGROUP\", \"ATTRLENGTH\", \"ATTRMAXVALUE\", \"ATTRMINVALUE\", \"ATTRSEQUENCE\", \"CALCULATION\", \"CLASSID\", \"CREATEINDUSTRY\", \"CREATETIME\", \"CREATOR\", \"CUSTOMATTR\", \"DATATYPE\", \"DATATYPESTYLE\", \"DEFAULTVALUE\", \"DESCRIPTION\", \"DISPLAYNAME\", \"DR\", \"DYNAMICATTR\", \"DYNAMICTABLE\", \"FIXEDLENGTH\", \"HELP\", \"HIDED\", \"ID\", \"INDUSTRY\", \"ISACTIVE\", \"ISAUTHEN\", \"MODIFIER\", \"MODIFYTIME\", \"NAME\", \"NOTSERIALIZE\", \"NULLABLE\", \"PRECISE\", \"READONLY\", \"REFMODELNAME\", \"RESID\", \"TS\", \"VERSIONTYPE\", \"VISIBILITY\") VALUES (NULL, 'N', NULL, '"+fileCD+"', NULL, NULL, '"+maxpaixu+"', 'N', '"+CLASSID+"', '0', NULL, NULL, 'Y', 'BS000010000100001056', '300', NULL, NULL, '"+filedremark+"', NULL, 'N', NULL, 'N', NULL, 'N', '"+id+"', '0', 'Y', NULL, NULL, NULL, '"+filedname+"', 'N', 'Y', '0', 'N', NULL, NULL, '2019-12-09 23:44:57', '0', '0');"); - sql.append("\n").append(createsql).append("\n").append(md_ormap).append("\n").append(md_column).append("\n").append(md_property).append("\n").append("\n"); - } - } - System.out.println(sql.toString()); - } - //@Test - //public void sql111() { - // - // List aa = new ArrayList<>(); - // - // aa.add("T7d260ab91159d88c092a9630a01ac84b"); - // aa.add("Tc32710a04811139335550b559f18fb06"); - // aa.add("T3e6325209aa9372a9fa7aa3621a09d9c"); - // aa.add("T30ffd81ab8e11c6fe4b891c45a86bc9e"); - // aa.add("T286ba4fbcc2a7cb6b2394e99f8b78f7a"); - // aa.add("T754c25e635f9cdfbc7a5f01528a5a5cc"); - // aa.add("T13cb61115364a82b48612ac75521b1cf"); - // aa.add("T2e4e6d8be2bfa6aa23da30c2d20dabe4"); - // aa.add("T9770a2478a1b8c7ce2be3244c789f1d0"); - // aa.add("Tac0583305b3428fb9e7c9a235c02df98"); - // aa.add("T3acdfa663ee3e36d4bff4c7fd4073742"); - // aa.add("T09f1a65f8b9586b0f04a25f20cddf1c2"); - // aa.add("T674da6f0f376b122a057cb69e3ed95b7"); - // aa.add("T30dcdd813437391552e40609946ad681"); - // aa.add("Te60f307405054ffb79266354a03a00f0"); - // aa.add("Tb10a7e0e5b8fbedff62f3afbb7cd875d"); - // aa.add("Td3675a0564d65616d1662d10ac09eeb8"); - // aa.add("T7b5031b080a13ee5d75ec478e7814b93"); - // aa.add("T8e68ade5fa14c304a4837acaa85650f0"); - // aa.add("T0e705a97498af7267e7b01324dabd0a3"); - // aa.add("T723cae7913fbfbd8cceafecddfe4e4ce"); - // aa.add("Tc557f91358ebb312d0643d2588dc619b"); - // aa.add("Te76d9ebacb4167480d6daa7d54375407"); - // aa.add("T49531d62e9b68dcda276a65a97e596e4"); - // aa.add("T0eb717effd51f1ec0aedee93b41171a7"); - // aa.add("T65e66c093eaafa26526605e0d097531a"); - // aa.add("T58b150c905c73cab4d9236735f0ef0fb"); - // aa.add("Tca9938dca4465740a56c2e9d0e56b7b1"); - // aa.add("T88a1a853083cc0de5d05e4e36aeb8b5d"); - // aa.add("T82e2e6a0b72b1b18175735cc76a02ab5"); - // aa.add("Tad5016191393f4fdf69acab09ac6f879"); - // aa.add("T09016a7e3af8445d0278ac64ed59f02e"); - // aa.add("T03a54a1963b146f97401b40f3d81ae1b"); - // aa.add("T6f390c752bd3f98feded679eb4d9ad56"); - // aa.add("T0ef189bc32155eb27fab2f46c2240695"); - // aa.add("Te95ea01f09c2d3cb19daf5d09a6fb110"); - // aa.add("Td057e5d758be0dc57e88b53b464bf7ea"); - // aa.add("T7f8c6c057ead240a99f9e6959d6bfb1b"); - // aa.add("Tb2640cffaba2a9740d5db0e990e48e27"); - // aa.add("T2052b31ceab887b426763ff69463c835"); - // aa.add("Tb1f2112178a38811fbb0b956d5ef28d8"); - // aa.add("Tced9eb62614be4f7496551e0b1df68ba"); - // aa.add("T7347b9a842a4ca280f90516606227824"); - // aa.add("Tcdb5e718f5ac4e63db1610b2917547cc"); - // aa.add("T14cac84e9342069faf98e554bd7d9e77"); - // aa.add("Td409a420778f6d120a4b9be501205151"); - // aa.add("T890016af1961a94c1a82bc0d93e1188c"); - // aa.add("T2409ff0ecc692b84da3273b2b30f0661"); - // aa.add("T6c3d73930b9dae80ab04d7906e0d393b"); - // aa.add("T0a0661f45ce610723cf011c80ff6cae6"); - // aa.add("T7402df3b8377cf5e28691fc2408a0441"); - // aa.add("Tc4360959b17866762ce4f222638ce768"); - // aa.add("T32d6349b94521848702722a8711db750"); - // aa.add("T8d14411226b2f42c1c65674a519e2729"); - // aa.add("T04630c4c606e56430dfb30725d4a9a89"); - // aa.add("T17f2fcc9a1ba7c49166f8e629c803169"); - // aa.add("T9e163442383c29ae583e68e366b5f108"); - // aa.add("Tdf69deb3cdfc3da870a283f32dfd5740"); - // aa.add("T1027a201ceeb9529d3b4a2e4fbbc90a1"); - // aa.add("Tfe0bbed7b20661fb9cc45897796ba89e"); - // aa.add("T83fb122db93c6ce92ccc16333244e295"); - // aa.add("T4dd66d5e991b80151083b650db47640a"); - // aa.add("T4233651e6c597d2dec3487774f5afded"); - // aa.add("T757ceefcfcefc3c46013ec45abae8fdb"); - // aa.add("T855c8c26de41ffe59bba5a32dbc1c1e0"); - // aa.add("T8caf826b3b2d69333be83669b9e1e42b"); - // aa.add("Tc3395843a81fd6a5f4eded12c14f7ac1"); - // aa.add("Tbb987e539d30892df000d67bb354fb14"); - // aa.add("T1070a61a85f4b3e7267c64af634165e6"); - // aa.add("T06f4a0386284983ad65e0b2beb667c6c"); - // aa.add("T2468f13c8d722678ae90eec6c2a93f02"); - // aa.add("T6675aaa525230364cc71126028512222"); - // aa.add("T55c7e4ec7170b0316ab1e43e819cc547"); - // aa.add("T2f6feb7852f759906b25378b50312ca3"); - // aa.add("T236c515c22af3aa5e0a4a338ee87c3f5"); - // aa.add("Ta06d243b5139795c4951a1afd244ed41"); - // aa.add("T738ea7bcf1fa32d645b74aec1339e24b"); - // aa.add("T9f593f50987c3f5c3e78517c6ea6f272"); - // aa.add("Tef63d4337dc4b62302ce0c9ac875331a"); - // aa.add("Td7a468557da9a423efcdbd6946a154b3"); - // aa.add("T9ed5e717ad271f3d9e71f55a568ace1b"); - // aa.add("T9a9e280256bc927ad700420b5e1d8640"); - // aa.add("T9f4e7bff60c3a0f183d1f125157a24b9"); - // aa.add("T6ddac096e509e93e60107cbe27c81482"); - // aa.add("T0856a8d0ede68cefde57efe6be3ee68d"); - // aa.add("T13c5b861907d3f17c79c27d9426eb6a2"); - // aa.add("T52c20bf533a587d381353d6a87de9ce7"); - // aa.add("T2b4eadd8ce7e54bc72a10152b4712243"); - // aa.add("Tf2fb4707a83799f7b39f734cf510b86c"); - // aa.add("T0b07b499bcb3bcd8594139afcc099e1d"); - // aa.add("T92634d855fa4b5b3a262ccae6b790091"); - // aa.add("T724a86da9f4d5e3673f407724609ef4f"); - // aa.add("Tfca89dafe7526ab96da4efb327ad90f5"); - // aa.add("T564a77f0c8faa21e618921caf95257e9"); - // aa.add("T872ff555e8ad07e46096008660a322cd"); - // aa.add("T0e96f085a99b1f76d060294353a76c04"); - // aa.add("T8b2f1ddb18c5874f24756df3b3bf4ad7"); - // aa.add("T80b0151bd5be7604c5b3a29d6102d475"); - // aa.add("T28d1fe4fc43cc9c2f4dac83c35157ed4"); - // aa.add("T4cc6050fd29cf3f8f1c3426df039ebc4"); - // aa.add("Td3fb5f407a5036c2f63affafc715c20a"); - // aa.add("T7d57f1623d174375a56d3f4f0b09b1ea"); - // aa.add("Te0322280d6b27a1d1e51b6242cbcb0e3"); - // aa.add("T2beecf89e1e8f2c41d46536ae6887bd3"); - // aa.add("Tea8fbef2a3ab8ecf2c63d5e5de0c7805"); - // aa.add("T1819fcecfb5cc5c825be84a3ea2bd658"); - // aa.add("T58fdc83076601cdfa8416383cd937d88"); - // aa.add("T0116f3abf296ae2c4846eaa61e0e8380"); - // aa.add("T52ab72a601bad9725b836dad738fb143"); - // aa.add("Tb417c6bdd7644a213332c853ba7d12f2"); - // aa.add("T20ba560eb5c330adad49cb57715398da"); - // aa.add("T792b85175831ffb410b4301a773b6d82"); - // aa.add("T969432ab18351e3abb5a4cbec4cebec9"); - // aa.add("T8ab9e944f2391bcc992407828c7f163e"); - // aa.add("Ta5d9feaab965bb485b58836409bf9eee"); - // aa.add("T5ab83f47df51c4aad983030646bf42f3"); - // aa.add("T323ead75a023d8761db49bc24d346796"); - // aa.add("Tbf09dc1a3bac6cfb4b6cb627a2291e90"); - // aa.add("Td1cc7a13defc56e981e813d61b27924d"); - // aa.add("Tc651f6bcdb749d31b838894cacdbce70"); - // aa.add("Tdf6c6d443bad467a808cf46cb2bd687b"); - // aa.add("T2765ae20134292cd29702542ad73f1c3"); - // aa.add("T3c76234bea3cca1e668446f6e04208ba"); - // aa.add("Tbf4b134d8e4db47471e586dcca21b786"); - // aa.add("Te7325a54eda4d0cc604c3a70d8447d9a"); - // aa.add("T63c9bde7a80560853dee74762b1ed46b"); - // aa.add("Te4188a759e0fdb2e14db3944da64093b"); - // aa.add("T525f6b02b8f3de6798de5bc2053cb7bf"); - // aa.add("T37fbba6404a433a1cf2bdc869e1498b9"); - // aa.add("Tb3fe1ddb9e650c3459d22b204ee0ca24"); - // aa.add("T77a18b00354a7facb8d50cdeb2ad78ee"); - // aa.add("T9de9c5b1ca8b7f3aff43a25dc7193dbf"); - // aa.add("Tcb16956e0facc364d59fabc14dcdfcd7"); - // aa.add("Tac62d61b416a890da597d39c1dabc1bd"); - // aa.add("T71fa766ce2f1a851aa999d8ce159e777"); - // aa.add("T5c8a2ddb9f36460ccd02f92d0897e0de"); - // aa.add("Td2aa87cb07c5497e1bb90c80c861fe2d"); - // aa.add("Tc82919eee70770884fc7de4439cf78cc"); - // aa.add("T190e2cf6b4eaa01f350812d2480c3411"); - // aa.add("T57e41f998ce52424aa178c28ed4c4c1e"); - // aa.add("T29749f5e6c06aebfd4fb4585b7ecfa56"); - // aa.add("Tc0fd8d8d3487ac24af137d7e74bc5513"); - // aa.add("T1783e6732459b5332f2048e476689c93"); - // aa.add("Tc330c4052c043ce07d641dc5b2aeebb0"); - // aa.add("Td02026264e0defcf7843d1648d3b9985"); - // aa.add("T493bb36df77c53c23488511f222740d6"); - // aa.add("T0a8a71b3fb3222126c2ed8f3cf685bc1"); - // aa.add("T9d4439f47fa2fb4b2c2b53d2702fc770"); - // aa.add("Td24285f4610f200fa4385111773b1022"); - // aa.add("Tcf52f5d2bc146918ff1b02a02718d0d8"); - // aa.add("T315a40d93dac0822c128c0ccb2b8f44c"); - // aa.add("T66ff6742cfb3299d555791315e4a8281"); - // aa.add("T85aec01979e1099c89edfe069f0a002d"); - // aa.add("T03b397cafd3867f1f8d9566505374f1d"); - // aa.add("T7f276be6f182dac3bad9fe1bd6d097d3"); - // aa.add("T62fd9732df9993cb7e9b5bb8f2bea587"); - // aa.add("T3f6c81a022a54d6039b867fa70556ea0"); - // aa.add("Tefb6879cf5b172358ef128b55286389e"); - // aa.add("T69e3d4db3d47127acb32b17332fcca00"); - // aa.add("T5013328be93adc6881510ea8a741fe8c"); - // aa.add("T6fbb91a278485db56af6b545cfdb1418"); - // aa.add("T7ef519395926892d6af07f7af3694555"); - // aa.add("T3cdd1a743496a36f34869387b8d3e59b"); - // aa.add("T3fc7f31024b73a7e0e8642cc32053e9a"); - // aa.add("T88434cb35a7c7916b7f7aee6fe12c788"); - // aa.add("T13c30cf128b9245150465886412ed51c"); - // aa.add("T133ed16a38343a941627a676805c9698"); - // aa.add("T8bf8abea9475952f99f2da686da15832"); - // aa.add("T21e5a5dfaf51c764d146396cbbf068a7"); - // aa.add("Te98800feb0bda6971669fb43ffbd7332"); - // aa.add("Td26ebde828a496c13b8519be5d7d719e"); - // aa.add("Te8ff9c2c881e322d957b9fcbca81706c"); - // aa.add("T6e2f7572765d56e5963a001f9dcb5e9f"); - // aa.add("Ta0b380234a86f0e6e13831574489b9f1"); - // aa.add("T664302f1067b082b4d1a4bb01d5eb292"); - // aa.add("T84f2304fec6ae71c7c146ba5f6ac8116"); - // aa.add("Tf7e1bd400270208d1e544ff4ce5ae612"); - // aa.add("T9dcca7fdbf573da13f66096eb3a76468"); - // aa.add("B5BB0CD8DD2D8BB62D385629616ECF87-20"); - // aa.add("B5BB0CD8DD2D8BB62D385629616ECF87-13"); - // aa.add("Te0205b4d441e5d9fa358e45d732d7561"); - // aa.add("T41240337001b783b95a34975a4f45c95"); - // aa.add("Tec9e75ea57e86c746c86ea1639945473"); - // aa.add("T2e3d830a512f3fa748fd9a6930cf4324"); - // aa.add("T78cc8c1021c1690581f0019d2f841afe"); - // aa.add("T7fb1fe74358714ee5c22a9643a63550f"); - // aa.add("Td6c3476fd0f85c661c398d785f047773"); - // aa.add("Te0b1400928e2a02a7d5c79c9a7ab710f"); - // aa.add("T8fb6f6ea731743c84449d70b8649cfef"); - // aa.add("Td06995b835fcbccf83035a2697c6af83"); - // aa.add("T89b639f5fb3f3fd5aca4cfbb0ac6787a"); - // aa.add("Td7c4eada741934061690837262a2b578"); - // aa.add("T09010cab0dd837e403d1532223cb737d"); - // aa.add("Tc59af5e720bc31601d44ec9cbeeb5a4e"); - // aa.add("Tcb863ae8910b65ce4c9ac58237e57f2f"); - // aa.add("Tb8b5925ed25b5283a4a6286090c5cb4c"); - // aa.add("Tf01dcf1d9f2a25ff8ced5ab632d388c0"); - // aa.add("T66eacc3b691c80f27dceca5103efaa83"); - // aa.add("T3d539dc02e253d42ce9e87d417181b11"); - // aa.add("T1d8cc22e996eb210a619b8490a6b6d7c"); - // aa.add("T4975d094854c20da5fbcfa3de839a783"); - // aa.add("Te0c0b27a14b6c51f764e14234eb4196d"); - // aa.add("Td60ac07381d6e27afe831ed38c60af60"); - // aa.add("T5d8d9238676abb0d4e5f550fb72e852d"); - // aa.add("T0a43ad2c2362083e15fe6e2a64a95b4c"); - // aa.add("T17669490aa08e1ac206888c87b19b2e9"); - // aa.add("T19c9731d1eaf5793e051903a43e2452a"); - // aa.add("T8fb57d9c5d05c9646d4aaa0fe857555d"); - // aa.add("Tbbdd0e602b6c4317ee6c17190936586b"); - // aa.add("T83dcdf59f5b6e923585ca379d799d5a0"); - // aa.add("Tc43343bd676b81c2247dd34d2e5d79eb"); - // aa.add("Tfd13985afbad235748f36aaac7b88d10"); - // aa.add("T8b9831516c7efec69eba1d1e74223d74"); - // aa.add("T48dd899ab5529c354ed134d7a8dd6eb6"); - // aa.add("T65b889db3bd5675bbafe840faf51400d"); - // aa.add("T571f8cd148159a5e95ef5d36c2fb75e6"); - // aa.add("Te79db98a4f1f6cef7e6a0cc3444c20dd"); - // aa.add("T85ee09ab7210a4ffec18dc89d7d472da"); - // aa.add("T94c3c9dd9da6c5a676e94c42c1d28385"); - // aa.add("T225a3721dc2d51d149646e116b69e258"); - // aa.add("T6b47f911be71a0c3e1cda764c0e551c1"); - // aa.add("T48b5864709b96c70e1f0b43cd16db59a"); - // aa.add("Tada43004e82421b6ad3ef944c829eac2"); - // aa.add("Teed80d6d1b481314c72b7fa96b06b51f"); - // aa.add("T3fcab602a8a2473853864551d6b5ac78"); - // aa.add("Td0f12620e38efbc26f96126bf574f712"); - // aa.add("Tad5fea29c4d7e6fe8bf5327723f9efb6"); - // aa.add("Te4f756360c01462a15410c207cb9f738"); - // aa.add("Ta2f6963677301359c5a25ea7d3dd6f34"); - // aa.add("Tc3798ba36b10f1800276d79eb1337f16"); - // aa.add("T6e4e82e303a06e4aff01ac380986ff35"); - // aa.add("T65df2c6d17cae181f68a582268c421ac"); - // aa.add("Td71324863eb56f3a02ca77d1b304ba6c"); - // aa.add("T2467ac9af46d8b9897b3affc6e991c50"); - // aa.add("Tdd5908619f1564003e6f53bd873ef8eb"); - // aa.add("Tc899fdd73fceda3dd3721bf76c9e3baf"); - // aa.add("Tb93db33d28ffd20f02fef655d1189f4e"); - // aa.add("T2a01fa2b1b4d8fce216cc2d0cc3863e3"); - // aa.add("Tfa03650a7d79efbf02dc76033edd5a95"); - // aa.add("T933cb24c71ecd3302696ec1eb95cece2"); - // aa.add("Tbfe963be64de005af2a8db2343454a98"); - // aa.add("T9ea5f1ee0f06765bb8fa62731e115af5"); - // aa.add("Tba08bb0882b8eef24e4a50f523ecea77"); - // aa.add("T26fe627cb181a58d52da72c19c9a95b4"); - // aa.add("T2bf3abd1b97c18a789955d16483306d7"); - // aa.add("Tecdc1318c1b3a020e95c4b9c02f4a35d"); - // aa.add("T758fd482e6746518e2e293ae45b64f60"); - // aa.add("T2dd2071d395f5ddc05e9891d2ef9d166"); - // aa.add("T1ab76834e70139f6f2a0656dcd16f587"); - // aa.add("Teb7da6ad72775f909fbdd82bdbe9804d"); - // aa.add("Tab31c03d49a76a7b31cc13f640fe2a00"); - // aa.add("T0ecd70b55aa3662aed25faeadcbde32a"); - // aa.add("T655f3158c79e1c9ea4e020f6a3415956"); - // aa.add("Td05da2995d810e216ae99bebe32448e9"); - // aa.add("T62a719c81b22b71486feb854fb9ea426"); - // aa.add("Tf9a1b41d4ab956d04b3ad5ade3f4ef97"); - // aa.add("Tdad31a6bc3757e166a0a0c7595ec0d97"); - // aa.add("T3aa36a62d59e3169516be660f0807c85"); - // aa.add("T34f09c42ede7069523a4f2cc4ec0c1ab"); - // aa.add("T970299035b4c6c6795aeea548a6e8875"); - // aa.add("T15f1ad9600f92eb718cff5fa94fc44da"); - // aa.add("T9a6275865fc8cdf5a8a92b75f8009809"); - // aa.add("Tcb6c4e23547c401a658bf6c419f381db"); - // aa.add("Tcedbe36ecb3f2e53b381361cde1e4310"); - // aa.add("T06e578cdb92c2e26a547c1ecad346f56"); - // aa.add("Taa2dd5a820c2233bd119d6222e607ac9"); - // aa.add("T4418ffb05e9fe8ba119b4f2804344972"); - // aa.add("T4c75a9fb59d0333a684b71a0e75cca1b"); - // aa.add("T450ee885f6d3a330373e0d39232cf266"); - // aa.add("T5ba4db5669be415549232d55fdd5a113"); - // aa.add("T4e2670dac9148c8f6dc7f5b56758a412"); - // aa.add("Tcdf6dd49ac88fbc3625f22b562f67052"); - // aa.add("T665198e7aa02cb83854ffe093f0ae826"); - // aa.add("Tb210c9745f4b3905fb88fed65a6b83b7"); - // aa.add("T367111adc6a738122b36b0565c938f40"); - // aa.add("Ta0e4bed45d64b33c3894ebc23cc2c311"); - // aa.add("Tbd486c688dc3e6ab018b8ebe7b10859f"); - // aa.add("Tf72f8a54ff1feb3950a1d2f307e7e6cb"); - // aa.add("Tfeaf3b7ff89f0bba854c8b7aa13eef30"); - // aa.add("Tc803df0193623d6ec5f65a7c5c3e36bd"); - // aa.add("Td286b3fc2434026af856b80734113a50"); - // aa.add("Tbaeddcc05534eaf8708b62513e23d643"); - // aa.add("Tb132824b069c3b0365795d16f27b0d17"); - // aa.add("T26d2d13c62240be5f92af0af467c747e"); - // aa.add("T058898d4075196c132f5f83147f6b9a1"); - // aa.add("T723ff78b3ca06d5a5099b788d7e4d9d7"); - // aa.add("Td63f5fa11b3839c800246fa5c589a29e"); - // aa.add("Tcf850ed99a80d662635a198ac6a1952c"); - // aa.add("Te2e65abdb4fcbf111e1fc3974a2a1888"); - // aa.add("T36911bff829dadc94337dc1188c66c11"); - // aa.add("T45f082dd8192a24bd0688aff70ea9fb2"); - // aa.add("T1063b9b1a6cee5057064a75c05f305ed"); - // aa.add("T48c490bc8154df670bf8aa2f83596392"); - // aa.add("T652fe1ccc49578443cd4fb2f0d82dd9c"); - // aa.add("Te5a375b6fdac674b03f46ad2af380697"); - // aa.add("Taf7ed220e896a083cb8f4f18fd07af80"); - // aa.add("T80d1c8986f815ec7a980d42e549effa6"); - // aa.add("T7400452d93e2b488e1b7b87e7b37f28a"); - // aa.add("T15fcfa6f9aea43781f287db08300c384"); - // aa.add("Tb996a4728b4db7ab7edf7248d24aa4b1"); - // aa.add("T3216a389f3287df0caca853eafb995e0"); - // aa.add("T35ca33f10fe071ced986ce30f50ba15f"); - // aa.add("T16b0bffa87c26ebda3ee24c7a02ee9ac"); - // aa.add("T6bb0b4481a8ec600c1d5f96af478db34"); - // aa.add("T6dbc85fdad6b4866038c8ed2a28824fe"); - // aa.add("T68a1b82e166f9c79999696719abe6076"); - // aa.add("T7d65340f2c4f73ac539e45511eb81d58"); - // aa.add("T17c3dc5c9bf3665bed1fa618b692a70d"); - // aa.add("Tc86ef94651a0556f36000df93480ec02"); - // aa.add("Td1e59c6466b5e1a3ce21ed9efd477e5f"); - // aa.add("T71b067ef0e6edb151de5b18efe380f96"); - // aa.add("T9a96e675f139774b14e8121904b3e7df"); - // aa.add("Tf006fc9bf11b6772b7193133b882551f"); - // aa.add("Te21269bafd6590e7597174b78d8eb4e9"); - // aa.add("T8bffced607636119c8b5f9f4c8c65510"); - // aa.add("Td2bd720e7327e0add6c991a01f441650"); - // aa.add("Tdda4f2f027399f161bba485e7b74c009"); - // aa.add("T2f7d24af84e939db1bf772eef3953bd2"); - // aa.add("T26dc0eb6b0cb58b333d17ef2bc7d44da"); - // aa.add("T7caa3a2cd4c07ae849b8676c9800aac8"); - // aa.add("T3996b5c121130a97c81896c9e44057db"); - // aa.add("T6c3fe006c5ec5e66d2974e977b0e8c77"); - // aa.add("T82a8fe1452dfc8de70ce8b8b5b9ece1f"); - // aa.add("Td0b803b077cac4a4db5eceb223a30a9b"); - // aa.add("Ta1f4a9040ae414310dc5436f09bad1be"); - // aa.add("T1b165369b57773f74a29372c02d2b319"); - // aa.add("Tf8899543484edc87d26254dd8aa6fd8b"); - // aa.add("T728b9a851a8fff6c82fd06427b135196"); - // aa.add("T9b9a171b2520c18e687235808d6ca30c"); - // aa.add("Teabddc4d758ac115f232d790043f5d8d"); - // aa.add("Tb42e35c167fe9de36faad06e589d4bb3"); - // aa.add("T374ee782ca45750f9667cea11c9c333c"); - // aa.add("Tc42799b8a44acd08c202214f5b810f58"); - // aa.add("T9b9b7809c624676f5e96ef370ec65714"); - // aa.add("T33bb0d2d211474dfba3c967c463ba2b7"); - // aa.add("T8724865c6a3e79590142debde1d9d4e2"); - // aa.add("T8e15ddad28348e148f85a72dc455e449"); - // aa.add("T4c01bebf4e42c02d67dacc9880f26dd8"); - // aa.add("T4c7e4acc2c58fdbe95362c909bd3e370"); - // aa.add("T33923ccf7dc1d91a203501ea5577c128"); - // aa.add("T63abe6c17691b6db265eb845533dd6e8"); - // aa.add("T74b824a51776f3821ca2536bd7adb51a"); - // aa.add("Ta21fb00ac1f85da28a291c9cd491311d"); - // aa.add("T10d641bc7a5459f050d120562a993f18"); - // aa.add("Tdc8ce07a6aa945bce57ddc59982f3a1f"); - // aa.add("T9d1ea23028caf21aa33de6628eb9e182"); - // aa.add("Td06508d359ffeecdfc874eb50c7fd239"); - // aa.add("T506e3956137c743279283ffe71d1fa9c"); - // aa.add("Tfd2e1950078506efd72a4338e4e828fd"); - // aa.add("T38c979a8f2be826e17d7e2082c25ca03"); - // aa.add("T6dd20ed4aac33004b91021d7bec46fd7"); - // aa.add("Tac2c5a5f2c0d9b901d05308ac59362c1"); - // aa.add("T6f3e1e67e5e19bbc84a212c849cd01b8"); - // aa.add("T92b6672d4466ccb37a1536e966c83443"); - // aa.add("Te93052e011482b420bf85056de06117e"); - // aa.add("T368de5c6c45bcc935a74636725d307c4"); - // aa.add("T48fe6f4ef3b866167da5913270140de6"); - // aa.add("Tfed3197e2a0771ad228ae86ba58e0e8b"); - // aa.add("Td2d9fd69911d81bd333e449707c74285"); - // aa.add("Tf7ad203836dfd079d98885f67f4557dd"); - // aa.add("Ta9dfd3111bac4b686239ec7a4c9e29b9"); - // aa.add("Te2e26ce6c87a9764fb21682ca100e745"); - // aa.add("Ta20b5746b64e0d62a84e360174857888"); - // aa.add("Teab1a0df0818b67afc62b988b6f97c8b"); - // aa.add("T09af992f2ac25048990e0cd6392f727a"); - // aa.add("T1f2e5f431de409fb74ab483fd300466a"); - // aa.add("T3f691cca4fc2b6e3f34eda112dd4d1bd"); - // aa.add("T23f495d5d7f446d83ea45baa0fe07c93"); - // aa.add("T39bcac8e1849f6cd7df2b418693196ef"); - // aa.add("Tdf5191bbd3208c9d8f777c365febc1a2"); - // aa.add("Tcff7e0a5b3a4f2899d2373216972f030"); - // aa.add("T5aaf4fb1fe9175341476662b9358bde0"); - // aa.add("T279bb591b49c30de73a070018f0dde1f"); - // aa.add("T44591b12c996efc8c48483b4bc0c869c"); - // aa.add("Te09822de928271162c35799a01c0512b"); - // aa.add("T45949f0f3f4e5d1a4241aad1240e260a"); - // aa.add("Tc4f52a06d2e6311bcd6d1feaf814fc98"); - // aa.add("Tfffe013f5fab5b4aa74fe3bedba3d45a"); - // aa.add("Tab665c192bf186502863408127cc310e"); - // aa.add("Tad0271a716fce39972740fd6de702e7c"); - // aa.add("Te4f82b19bb3a4ac25365a3aa9877b6d9"); - // aa.add("Tf57efc9ce2001412a66de4cc6444ac78"); - // aa.add("T2255a0f4089cfab36d6f485de071fe28"); - // aa.add("Tfdddb234a98f30e7d5f8c21d419262dc"); - // aa.add("Tc77fe05b6a0a82fb8ac6906b81a8c069"); - // aa.add("T090c79d4e692fc281d381d6e7f72d14c"); - // aa.add("Tb4289c8691c8555fab714c3d1c8264bb"); - // aa.add("T7b89037877b6cd26f4b1bd23c0651dfb"); - // aa.add("T84e142e8c20921ff12537e94495de880"); - // aa.add("T1211ae551daf121d7f997c40fac304bb"); - // aa.add("T2a33ce68ea757b3c04f873409ac5e495"); - // aa.add("Tf9231f3f83deaa9b8a27f9b079624ba9"); - // aa.add("T9b77228fb980bcfeca3a5fcb5e758d1b"); - // aa.add("T34be499c8e16dcd757d65304b11c5a5b"); - // aa.add("T0579c25e110e2ec4a4d7b2c7ab6937d9"); - // aa.add("T2b3260c179d281e1bbbe00fcdb1f1cee"); - // aa.add("T546247e212269054d6dd2cef163b42ca"); - // aa.add("Te10c61341abda725d15d21471200ad09"); - // aa.add("T180641c89fb6f72e7a68488ed1f070db"); - // aa.add("Tfc80fb6381f25c87858efc76598291ce"); - // aa.add("Td93ab142580066b51aab6d779ae68efd"); - // aa.add("T78502b30334573bdf0e914f11af6eae4"); - // aa.add("T21caa673972bc06b7a69afc1b5f0374d"); - // aa.add("T189386674748776640512bc9598c03fa"); - // aa.add("T910f41aac3f3d55d3e292ec89c703d72"); - // aa.add("T7861efcefb965600b516a90bf2e222c5"); - // aa.add("T703141fc5bcfa3e996e25f379c3ae3da"); - // aa.add("T42d4bd19b37df32323a2d79b369c90fa"); - // aa.add("T0c4d8e270fff187015edc5d2290fea21"); - // aa.add("T0e3872cb39766ddd6ed8bb07724abf3d"); - // aa.add("T9c4a4c103d2e6e7d002dcff81ae943ca"); - // aa.add("T02fc40feb9f4d934e7e8a17670a89135"); - // aa.add("T920aa98777ba3547a51743aa8ace8269"); - // aa.add("Ta33556a14a06e7fa072c5c2c10c1ffbc"); - // aa.add("T827d61cb94db3c4deee33e82dcfbc768"); - // aa.add("Tf69f0bebdaf51628df16f3412c8113cf"); - // aa.add("T2fdd9a160b2751f38cf919a6c138721f"); - // aa.add("T643745d1968256964eea70f7197fc664"); - // aa.add("T6dad618cefa6ada4aae75df2d077dd63"); - // aa.add("Tb4632990e56ee92c061a8549260f9c32"); - // aa.add("T550f47bbe34ed217c66956d582787312"); - // aa.add("Tc53082d19310c1104ec7af4af1164ff7"); - // aa.add("T1458464c989264ceb7d254e0ff8fc03e"); - // aa.add("T463c585ec8147bf3abb356ba7b2ddc65"); - // aa.add("Tf216156e24c96b5925722fd904af7706"); - // aa.add("T5dbf2f4e9b0267cfe2259174b2f1127f"); - // aa.add("Tc9f44394dcf6fcaa03d6e0d527a67d24"); - // aa.add("Tb026f0b342900d62f0174ec0f519da78"); - // aa.add("T2a4b5eab7df66821b0a810f04c9e42dc"); - // aa.add("Tbf36263f28fec69361fd15f32100582d"); - // aa.add("Tf0afa46540eb3ef2a7c1da061e3a21fe"); - // aa.add("T741cb661af10fcc1a5103a7f4366cf72"); - // aa.add("Tdf5747ff3ddce6aae8976705a905fd23"); - // aa.add("T8e5fee75890b55870c2acadecbc3a12d"); - // aa.add("T1ae2704949b998a68f5ec32ed6d2edb4"); - // aa.add("Ta0869af5d9900e2cbada9750c82684ad"); - // aa.add("Td662a2d37f7c5f183a988cda4ba99754"); - // aa.add("Tbb1920003c78b2543116ac6e079d899d"); - // aa.add("T4e9cf45f5adac217a89ec3b15c20ae80"); - // aa.add("Td593c49a24174cbeb6edba7a56fdf60a"); - // aa.add("T0238ca2cc95deeacf3f2cad2074df9ea"); - // aa.add("dpl1b41f00dbdce07b5001704fe0df99f"); - // aa.add("T932c54cfb0a6295e46a0d36afd423713"); - // aa.add("Tcabf6df4a4105d672ee6b2ab5439a2e1"); - // aa.add("T02ee52b72c8a9d6eca93dee627009629"); - // aa.add("T19e850917c96b34948822e87f56c0482"); - // aa.add("Tacc661e86735e261c813f925f9e3da72"); - // aa.add("T391bf4a917a584df05e130cf60d2345e"); - // aa.add("Taca67fdfaf4c57d6cbd32d817daf31a0"); - // aa.add("T98620621dd83c39636472606f84f4edd"); - // aa.add("Ta9aff41bc3c3dab1ac98437773bf3d03"); - // aa.add("T37f09c2b8abd25c1228a2b6afc98be44"); - // aa.add("Tbe96e4b5eacebf9d38b6a6634cb9af1d"); - // aa.add("Ta4e35940643667741192b4780d3033eb"); - // aa.add("T5f5fe64a25deb5eab29807c5b78507a3"); - // aa.add("Tbca6566cd989df071cce69c94344af88"); - // aa.add("T393a12c6b0dda94312dac8a8480d51ef"); - // aa.add("Te4c5fb2b696750c785c880ac1f0ca7d2"); - // aa.add("T3c7ca8c31847f5df9040fd752ea30ecb"); - // aa.add("Tb06df77f70dd38ccf7622391f57e685b"); - // aa.add("T9be9c84701a54594d65d9002e093f435"); - // aa.add("T207906127971193267acaf794caeb519"); - // aa.add("T1e7bb5c6ed2966c1895927675b96b7d5"); - // aa.add("T650a4355dad86bf494b94cf9b704595a"); - // aa.add("T46d8493e6d3c8beef35d92562a0bee9f"); - // aa.add("Tc1481cc32ab4e1afb792660dceabdb05"); - // aa.add("Tc7b379b250d534884ef23230c9be9361"); - // aa.add("Tf459bff9f3bacba2bb358c9afe2f4b98"); - // aa.add("T078736ab9444a31c5ba351ccb8d8cd29"); - // aa.add("Te8bca930d20c6caf5bda55698c7f5374"); - // aa.add("Tecf61209ec1969cdacce508ed16d71e1"); - // aa.add("Tefa5aa5e5365e55e4aaefddabef5c8d8"); - // aa.add("Taff99761189eaa8751c7940435cc3255"); - // aa.add("T41c8df170fab4deeb218804f3cdc6a39"); - // aa.add("T90c202446b14c10a12754e31b1f29007"); - // aa.add("T339f95bd4a8e05e3085a26fd8dedf097"); - // aa.add("Ta71cdf25b647ca51acf8ad8caa959659"); - // aa.add("T7ca6d01d4c8b7ba9e6bd3c04f30cd5f7"); - // aa.add("Ta4e6c8a7152506ccb4890179498686a6"); - // aa.add("T17feffe98b283f4727134910d3055c28"); - // aa.add("Td598acd585b8a1818547ffa0b75017be"); - // aa.add("T480e0fe326c3f05154083e4ef6893379"); - // aa.add("T837f8fe061e118ba43695c9e2318cab1"); - // aa.add("T7a0f6eb83a3782cbd6902bbe78210384"); - // aa.add("T66bca342cee7bd02cf3b9a8d692763f4"); - // aa.add("T2fda8902459864513a57e84fdb0f0cca"); - // aa.add("T41dbf3a84f3a403ccbed00b1f97b9b06"); - // aa.add("T38869c10844c5faf6ff85274502689e7"); - // aa.add("T843827e9d3dee140374fe69aa5cbc998"); - // aa.add("T2989b7b93eb649d882ed06f6072a8a0e"); - // aa.add("T3386ee3008408d2c3db73647f2b1a6c5"); - // aa.add("T41a4ce09d389b484e570d88976d2a337"); - // aa.add("T675380cd234f5f3199eaef9f4aa9f2d4"); - // aa.add("T58904ee136246f907c62d1cffbee7ace"); - // aa.add("Tefdf8e63f6d83af548cfe6877b87fe18"); - // aa.add("Tb3d4177c86d96a132ca3f3cdb9ceac73"); - // aa.add("T9fc582a9405c6dc9510da93722168792"); - // aa.add("T3a17b1a91733c9d4bf84e874017badbe"); - // aa.add("T9b82a616ce6308b3a7e4e1fffeb04bb1"); - // aa.add("T823b8083f67c4427bec0dfd65266ae9d"); - // aa.add("Tca0efe3eeda1813f1984feb35d4f5665"); - // aa.add("T29719d01b04d470cf149e837d7080d28"); - // aa.add("Tbebf4138c2826f6916506af185978811"); - // aa.add("T87561afba4165b4c2b7ef6b6ac3b47bd"); - // aa.add("T7afcc87d8f00ba932d369234adf2a60f"); - // aa.add("T4671b9e3f2f29b8fb45ae0a12ac4b0b5"); - // aa.add("T129345fe5aac6013aa019591b1a59a56"); - // aa.add("T6a50018fc61a8fb779812f368d9ad7dc"); - // aa.add("Tf075204f4d3830945e11cf394ddbf542"); - // aa.add("Ta106d20e904254064074a6087c860cb1"); - // aa.add("T9381afb527efa46167c7d738b8119fe2"); - // aa.add("T61538132718448c24297fac17f65a0b4"); - // aa.add("Tbbe7c4e436a72bb1f34047ef8611d30f"); - // aa.add("T5c0e2ae3aac33cc1bd2e4a1ff1e85706"); - // aa.add("Tab748644ebc9a7e8aeb7ec6521ba6f92"); - // aa.add("Td7002615bfd64cd2a632143099f5892a"); - // aa.add("Tcb3acb53ddae9821dfdc50e7d3fbafef"); - // aa.add("T83092af2dafdb8fd0681a423a69207cd"); - // aa.add("T6d400f47eecd7c0faf8cc71516c4374d"); - // aa.add("T34e6b30e15a5f4a4e5c0c3477a7d480b"); - // aa.add("T5ec271b66b6832189e6b5a323bf6c2c7"); - // aa.add("T99d475dee8ccba32216b7b90c234950d"); - // aa.add("Tac313fae384ba6e230d8c66d599bb978"); - // aa.add("Td90ebcc5a9664ecd00dd0c7466e20b59"); - // aa.add("Tf9b29d9386fc77c7c9b9748009db2a83"); - // aa.add("T896ad0e47633b7f9158f3d4715a400fb"); - // aa.add("T00ac1c73252d1f5533b7c5c971cdff92"); - // aa.add("Tdc410dc8212b00d40754e489594e6292"); - // aa.add("Tfedc31d7b5af859d05ef89cedc069254"); - // aa.add("T083b1124999415e1633c1510e12a092f"); - // aa.add("T2c4ae3160e76f349ecd24a706cd2d007"); - // aa.add("T6ef3e867f2469f8e593c6bd386093427"); - // aa.add("T6c691bc9417c4fb3e3035948b681b7f5"); - // aa.add("Ta0b61406f228ff8411388fc4e4e25746"); - // aa.add("Te53f51bb6b6b9ffccd1ba5edd70f7036"); - // aa.add("T88ef026e8acda74dc1a2edf40d1dc243"); - // aa.add("T9bc3bd0818d37a90c7aedb28058fab96"); - // aa.add("T242dcd761fb57d86397fc20046082062"); - // aa.add("T7ea014126c658a424d7bb99eac445883"); - // aa.add("T884e4894bc9e1be2b312cfe6b15d6272"); - // aa.add("T41358b0847126161cc8adf987f8541b0"); - // aa.add("T56cb30ec9a055196b113e44d531b663e"); - // aa.add("T86ccc3ee7ac5e26a8103ebdad173bce5"); - // aa.add("Te52ba444abf00df2c2d8ade417e8c218"); - // aa.add("Tbdd577fdbb4bc9b1da23743c20ac7150"); - // aa.add("Tcf3de766fd8f766692056d2aff72469d"); - // aa.add("Tb1fea1e77c6f1c8642d5751bc027acd3"); - // aa.add("T21254bb5200901c412609ee98ed77e0a"); - // aa.add("Te2d67d26057f70c66631ff0f47647082"); - // aa.add("Tcc0154e886f702ffc9d008c7ed09f44e"); - // aa.add("T1c37dec6eb52201e5a8a39e086f8509a"); - // aa.add("Tc803952f5d35d75ffd2f2bedced13b2a"); - // aa.add("Te5b7f40c08b0b1938abd29dd5692a9a4"); - // aa.add("T1ee7d51a7f4bdc8cce5ccb14e709b76f"); - // aa.add("T61b33fbc5835202169007ad8a6b60da5"); - // aa.add("Tb31218adeafc12ca79a50117cf86cab0"); - // aa.add("T7220abf05eec68e7eaa11bedf15dabc0"); - // aa.add("Tc6b1eedba967abcfc9b965608071c084"); - // aa.add("T39afc859cf8c31b85178b54dba183e6b"); - // aa.add("Te4af6a603edc654ebf5413d8c346ca08"); - // aa.add("T90d05d77c164225cf04fd541866be83e"); - // aa.add("Tdb1db7608d081f9d28bfae311c9110ea"); - // aa.add("Te536f22548725d4bc47adb184c62e9d6"); - // aa.add("T549ef64f4628b7ee03a57f17dadb7c0b"); - // aa.add("Tcf13bad93800dc224a8021d518921f31"); - // aa.add("T01b839a690855c3b6b2bb5cb464d5ab2"); - // aa.add("T8523a2d87c9a631353863289fdddc3e3"); - // aa.add("Tc15a0ebc8cfbdd1675ea2c91c5fefc29"); - // aa.add("T2da6099adee545aa42cd1889b98852af"); - // aa.add("T17ed7465242f80dd76381feaab30ec93"); - // aa.add("T33ffd8665395ea946b40bbe3f242300a"); - // aa.add("T0239cd608eb5c7419842642dc2794705"); - // aa.add("Te585b7be2c9edfeea773cd04812d9749"); - // aa.add("T3b4a7ca0771fca23b818e86090376c89"); - // aa.add("Tbd4fc19e96fbe4e7f31926bf5220de09"); - // aa.add("T6bb509909d6419db5ff99fd605f78f30"); - // aa.add("T9b415f683974fdf465975d2a97c662be"); - // aa.add("T577173c65c539cb71056cd465974d244"); - // aa.add("Ta9afe9a619fb9c9348969126ae0c7acf"); - // aa.add("Te04bd34285033ebc8b5dc14672839d26"); - // aa.add("T375ee42782db4efc4d291dc357e84e87"); - // aa.add("Tdab165b70c6ee315467db9b8ba543c24"); - // aa.add("T7b5b88cf86cd1717503ab63505a50598"); - // aa.add("Td53adb7b3bff4563cfd97e38386bbb12"); - // aa.add("Td1fc19a527ffc7b45cc966649e75e94c"); - // aa.add("Tc27a07cc37b62be3832ef056bf087712"); - // aa.add("T95e2fbbe798eee46348de0783bef9f05"); - // aa.add("T16a91811c6a351a3b5b3c9b8c9c3d272"); - // aa.add("T3d7a668e5d445ee9bb98a457603cd14c"); - // aa.add("T8978c61031edb6354138373aaf90baef"); - // aa.add("T178b405e680567e1a27472e0445df2f2"); - // aa.add("T3df6d12658cde6c482fa7f4ef1c9c797"); - // aa.add("T692958b77cb64488a0962ca334184b6a"); - // aa.add("T475b7427fcf3cf2ddf48b89ee9ef54b4"); - // aa.add("T178f5e6f0f87fab494aed0ef36d1d939"); - // aa.add("3382762AB374C4913CECA7F9FEAE8EBF"); - // aa.add("T4a20a9e11c901cc20c8420b8312d0e6c"); - // aa.add("T61aaf17756a11eb6454840f3adbe8b5b"); - // aa.add("T47b87f3831477062f409fe9c286b0fc1"); - // aa.add("T594c4a640e543c449a5a4825cd25467e"); - // aa.add("T94819d0ff643900b6103e80a17525d6a"); - // aa.add("T737a2f994a1ddc8ae700225e03884b27"); - // aa.add("T6aa6236048bfa6cd5b907cc8efa12a72"); - // aa.add("T44909735d64db5afa92fb04d1783a7f8"); - // aa.add("T148c6abefda6f29e252738ac8759ebef"); - // aa.add("T410b72166a4a7a4b862e1c89e8fcfe84"); - // aa.add("Tbfeb3f0b76c01b8897a5b1b6549fd0af"); - // aa.add("T39fe92f12eb4d32870c52fb6a29ed1dd"); - // aa.add("T6673461c13ff0779c921bad835352335"); - // aa.add("Ta32f12ae97f8693a77ce7344d71c2ba3"); - // aa.add("Tc529e82fe48ac695bdff6d0857ba25dc"); - // aa.add("Tca91357f28d8127fe99f5c76ae79de30"); - // aa.add("T9fdc1094442841b01258c5a8b2cffd70"); - // aa.add("Tf16d582f06be7eaea83e0e52f67244cd"); - // aa.add("T88832fbf364ff585cfa5c9adddc4ed5e"); - // aa.add("Tca9be4dc03e26b93e629ff9505459c87"); - // aa.add("T65b218137aa8a29c9cafc462b571bf54"); - // aa.add("Td62b18a4e878bd5af60e6a3c9378a214"); - // aa.add("Tc54931a6654ec64b42f1b316ab5d6f1c"); - // aa.add("Tb822fc5b54b40838ba7174c0255b8199"); - // aa.add("T3e5318790d14e17332de2b9c16095276"); - // aa.add("T8147069c814617341ac95380a1f7cfd1"); - // aa.add("T6e2f43d4ee33d4a87e094fb3f4f33a76"); - // aa.add("T6143750b2c0b010dfbaa48da1d7634c2"); - // aa.add("T55e785154a89c12fe526a94138bf456c"); - // aa.add("T5a9f01c739277e9e3f6e9ac353ff68b2"); - // aa.add("T226dba6237eae8cad78e6aeac6eae08a"); - // aa.add("T78e3e87bed58178e61a5ab9ae4725bcd"); - // aa.add("T24537229254670a347a8de1e5387a55f"); - // aa.add("T6f4995ad6fa029e7157e8622349507c7"); - // aa.add("T1256f08afab350d230481aebcc4957f9"); - // aa.add("T4dbdfd6508aaab5373f116fdb1128b6c"); - // aa.add("Tddfba761c4a3ac062f108fbd0d91e3d2"); - // aa.add("T224d5019b3745e88dcf549b9492e1061"); - // aa.add("Tf31b1478db3dd7fe3b69e36e0c9f896d"); - // aa.add("T51843360ef5877c50d5ce8e0e7ecfcde"); - // aa.add("Tcdb8b30b055dc5c2295fb49956a8d01a"); - // aa.add("T8c4351d0a4abc7c2910ccfe294018753"); - // aa.add("T39df367599a6e894533fa53eff6b4890"); - // aa.add("Ta2c10559f3a9fd3f29dfcb91c4326722"); - // aa.add("T2ed1376a508a19ad92d6842240ae6b62"); - // aa.add("Te484af12398ed495d4654cf7f0460600"); - // aa.add("Tef1ac991153d25babf116dd674a84006"); - // aa.add("T4f102f3cc084ccda2b402d8be084d2ed"); - // aa.add("T80bbca82c1d91872d16a7ca60cab8227"); - // aa.add("T0bf7eecd6536360414de525eeaa7eec9"); - // aa.add("T9634beb6617e477b610da72e1400bfeb"); - // aa.add("Tb6a67e943e9148da5f8c9277450da6cc"); - // aa.add("Tcc27b633f156b5cae9429383f489293c"); - // aa.add("T89ef92c903b81f86928838ebeaa5a6af"); - // aa.add("T086ffaa65c6d3e41fcbcf107d46ce641"); - // aa.add("Te18658a7260b6a8068c69599dae02714"); - // aa.add("Tff9ccacf5e70036502b813f60aa81dca"); - // aa.add("T1a85dc12261f0c603db573bd2d1bd91b"); - // aa.add("T7a7662c98e796382e53eec94ba59221f"); - // aa.add("T4ed6b677e39431eb76c00b4b800f90a4"); - // aa.add("T6cacea721c28d36e317d905aa3a81e2b"); - // aa.add("T70e3553fd3c77cd0656bb95bc20b80f7"); - // aa.add("T99e75aee41b81d4f4818ab288e76140c"); - // aa.add("T9956802b599d54980110475fa97ca61b"); - // aa.add("T098c3ed7de4e870ecd7677dae5ef0af6"); - // aa.add("Te291959e1a0797eed5206e30434301a7"); - // aa.add("Te0b50cc95c45ec09f6ad2a418c30c21c"); - // aa.add("Tdb426e2af9592c95196a57e494526718"); - // aa.add("T16ef3a67209950a9e019f18af3baad56"); - // aa.add("T173abcdc83369170c6e130dd4cd2b04d"); - // aa.add("T89a1632e4c83bbc7a7d9b0f6e203a85e"); - // aa.add("Tc23891c247d52ddc0f51526e5cfb0f53"); - // JSONArray b = new JSONArray(); - // - // for (int i = 0; i < aa.size(); i++) { - // Map map = new HashMap<>(); - // map.put("NCGGUID", aa.get(i)); - // map.put("Status", "1"); - // b.add(map); - // } - // JSONObject json = new JSONObject(); - // json.put("Data", b); - // HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); - // - // - // - //} } diff --git a/base-common/src/main/java/com/hzya/frame/email/EmailUtil.java b/base-common/src/main/java/com/hzya/frame/email/EmailUtil.java index 18f3388d..82e2dcff 100644 --- a/base-common/src/main/java/com/hzya/frame/email/EmailUtil.java +++ b/base-common/src/main/java/com/hzya/frame/email/EmailUtil.java @@ -1,6 +1,8 @@ package com.hzya.frame.email; +import com.hzya.frame.web.exception.BaseSystemException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; @@ -24,21 +26,50 @@ import java.util.List; */ @Service public class EmailUtil { - @Value("${spring.mail.username}") - private String sendEmail ; - @Resource - private JavaMailSender mailSender; + @Value("${spring.mail.first.username}") + private String firstSendEmail ; + @Value("${spring.mail.second.username}") + private String secondSendEmail ; + // 注入第一个邮箱发送器 + @Autowired + @Qualifier("firstMailSender") + private JavaMailSender firstMailSender; - public void sendHtmlMessage(String to, String subject, String htmlContent) throws MessagingException { + // 注入第二个邮箱发送器 + @Autowired + @Qualifier("secondMailSender") + private JavaMailSender secondMailSender; + + public void sendHtmlMessage(String type,String to, String subject, String htmlContent) throws MessagingException { + if("1".equals(type)){ + sendHtmlMessage( firstMailSender,firstSendEmail, to, subject, htmlContent); + }else if("2".equals(type)){ + sendHtmlMessage( secondMailSender,secondSendEmail, to, subject, htmlContent); + }else { + throw new BaseSystemException("邮件类型错误"); + } + + } + + public void sendHtmlAndFileMessage(String type,String to, String subject, String htmlContent, List attachments) throws MessagingException, UnsupportedEncodingException { + if("1".equals(type)){ + sendHtmlAndFileMessage( firstMailSender,firstSendEmail, to, subject, htmlContent,attachments); + }else if("2".equals(type)){ + sendHtmlAndFileMessage( secondMailSender,secondSendEmail, to, subject, htmlContent,attachments); + }else { + throw new BaseSystemException("邮件类型错误"); + } + } + private void sendHtmlMessage(JavaMailSender mailSender,String sendEmail,String to, String subject, String htmlContent) throws MessagingException { MimeMessage message = mailSender.createMimeMessage(); - MimeMessageHelper helper = new MimeMessageHelper(message, true); + MimeMessageHelper helper = new MimeMessageHelper(message, true,StandardCharsets.UTF_8.name()); helper.setFrom(sendEmail); helper.setTo(to); helper.setSubject(subject); helper.setText(htmlContent, true); // 第二个参数设为true表示启用HTML格式 mailSender.send(message); } - public void sendHtmlAndFileMessage(String to, String subject, String htmlContent, List attachments) throws MessagingException, UnsupportedEncodingException { + private void sendHtmlAndFileMessage(JavaMailSender mailSender,String sendEmail,String to, String subject, String htmlContent, List attachments) throws MessagingException, UnsupportedEncodingException { MimeMessage message = mailSender.createMimeMessage(); // 使用MimeMessageHelper的构造函数设置multipart模式为true,并指定编码 MimeMessageHelper helper = new MimeMessageHelper(message, MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED, StandardCharsets.UTF_8.name()); @@ -60,7 +91,7 @@ public class EmailUtil { mailSender.send(message); } - public void sendSimpleMessage(String to, String subject, String text) { + private void sendSimpleMessage(JavaMailSender mailSender,String sendEmail, String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(sendEmail); message.setTo(to); diff --git a/base-common/src/main/java/com/hzya/frame/email/MultiMailSenderConfig.java b/base-common/src/main/java/com/hzya/frame/email/MultiMailSenderConfig.java new file mode 100644 index 00000000..4a4a0047 --- /dev/null +++ b/base-common/src/main/java/com/hzya/frame/email/MultiMailSenderConfig.java @@ -0,0 +1,96 @@ +package com.hzya.frame.email; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.JavaMailSenderImpl; + +import javax.net.ssl.*; +import java.security.cert.X509Certificate; +import java.util.Properties; + +@Configuration +public class MultiMailSenderConfig { + + // 第一个邮箱参数 + @Value("${spring.mail.first.host}") + private String firstHost; + @Value("${spring.mail.first.port}") + private int firstPort; + @Value("${spring.mail.first.username}") + private String firstUsername; + @Value("${spring.mail.first.password}") + private String firstPassword; + + // 第二个邮箱参数 + @Value("${spring.mail.second.host}") + private String secondHost; + @Value("${spring.mail.second.port}") + private int secondPort; + @Value("${spring.mail.second.username}") + private String secondUsername; + @Value("${spring.mail.second.password}") + private String secondPassword; + + // 第一个邮箱发送器(跳过SSL认证) + @Bean(name = "firstMailSender") + public JavaMailSender firstMailSender() throws Exception { + return createMailSender(firstHost, firstPort, firstUsername, firstPassword); + } + + // 第二个邮箱发送器(跳过SSL认证) + @Bean(name = "secondMailSender") + public JavaMailSender secondMailSender() throws Exception { + return createMailSender(secondHost, secondPort, secondUsername, secondPassword); + } + + // 通用创建方法:配置邮箱信息并禁用SSL验证 + private JavaMailSender createMailSender(String host, int port, String username, String password) throws Exception { + JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); + mailSender.setHost(host); + mailSender.setPort(port); + mailSender.setUsername(username); + mailSender.setPassword(password); + + // 配置JavaMail属性 + Properties props = mailSender.getJavaMailProperties(); + props.put("mail.transport.protocol", "smtp"); + props.put("mail.smtp.auth", "true"); + props.put("mail.debug", "false"); // 关闭调试模式,生产环境建议false + + // 根据端口设置SSL/TLS(465通常用SSL,587用TLS) + if (port == 465) { + props.put("mail.smtp.ssl.enable", "true"); + } else if (port == 587) { + props.put("mail.smtp.starttls.enable", "true"); + } + + // 跳过SSL证书验证(核心配置) + disableSslVerification(props); + + return mailSender; + } + + // 禁用SSL证书验证的方法 + private void disableSslVerification(Properties props) throws Exception { + // 创建信任所有证书的TrustManager + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return null; + } + public void checkClientTrusted(X509Certificate[] certs, String authType) {} + public void checkServerTrusted(X509Certificate[] certs, String authType) {} + } + }; + + // 初始化SSL上下文 + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, trustAllCerts, new java.security.SecureRandom()); + + // 设置自定义SSLSocketFactory + props.put("mail.smtp.ssl.socketFactory", sc.getSocketFactory()); + // 信任所有主机 + props.put("mail.smtp.ssl.trust", "*"); + } +} \ No newline at end of file diff --git a/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java b/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java index 56fc2397..bb6d25be 100644 --- a/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java +++ b/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java @@ -230,39 +230,4 @@ public class EntranceController { } - @Resource - private EmailUtil emailUtil; - - - - @RequestMapping(value = "/sendemail") - @ResponseBody - public JsonResultEntity sendemail(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception { - - //emailUtil.sendSimpleMessage( - // "number8912@qq.com", - // "测试邮件简单", - // "这是一封来自Spring Boot的测试邮件" - //); - String filePath = "/Users/apple/Desktop/【C4协同费控产品】(报表相关)字典说明zm@2025.pdf"; - File file = new File(filePath); - List attachments = new ArrayList<>(); - try (FileInputStream input = new FileInputStream(file)) { - MultipartFile multipartFile = new MockMultipartFile( - file.getName(), // 对应表单中的文件字段名 - file.getName(), // 原始文件名 - "application/pdf", // 或根据文件类型指定 MIME 类型 - input - ); - attachments.add(multipartFile); - } - String htmls = "

任务列表

问题标题详细描述预计完成时间
共享结算备注结算单备注字段赋值2025年7月2日
流水状态展示调整1、流水匹配界面,明细行匹配状态 调整为已推送
2、查询条件 已推送明源 调整为已推送
2025年7月3日
共享单据挂起后,银行流水对账界面客商有误2025年7月4日
单据在审核中心 详细信息默认不自动带出审批界面表体明细数据未自动展开2025年7月4日
单据传输失败后,ncc 有自由状态的单子通过接口对接NC单据,附件上传失败后,单据未删除2025年7月3日
对接审核状态更新优化共享审批,取消审批,共享审核,共享复核,驳回状态回传简道云2025年7月10日
"; - emailUtil.sendHtmlAndFileMessage("number8912@qq.com", - "测试邮件html", - htmls,attachments); - - return BaseResult.getSuccessMessageEntity("成功"); - } - - }