Commit dde171dc by 王祖波

使用线程池处理

parent 3cbb61d3
package com.gic.haoban.manage.service.context.combined; package com.gic.haoban.manage.service.context.combined;
import com.gic.haoban.manage.api.qdto.combined.CombinedQDTO; import com.gic.haoban.manage.api.qdto.combined.CombinedQDTO;
import com.gic.haoban.manage.service.context.chat.BusinessManager;
import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.Caffeine;
import net.coobird.thumbnailator.Thumbnails; import net.coobird.thumbnailator.Thumbnails;
...@@ -18,6 +17,8 @@ import java.io.File; ...@@ -18,6 +17,8 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.Iterator; import java.util.Iterator;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
...@@ -33,6 +34,15 @@ public class ImageCombined { ...@@ -33,6 +34,15 @@ public class ImageCombined {
.expireAfterAccess(30, TimeUnit.MINUTES) // 可设置失效时间 .expireAfterAccess(30, TimeUnit.MINUTES) // 可设置失效时间
.build(); .build();
public static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(
20,
50,
60L,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(100),
new ThreadPoolExecutor.AbortPolicy()
);
public static final String IMAGE_REDIS_KEY = "haoban-manage3-service:combined_image:"; public static final String IMAGE_REDIS_KEY = "haoban-manage3-service:combined_image:";
private static final int MAX_HEIGHT_NO_WHITE_SPACE = 1500; private static final int MAX_HEIGHT_NO_WHITE_SPACE = 1500;
...@@ -44,8 +54,8 @@ public class ImageCombined { ...@@ -44,8 +54,8 @@ public class ImageCombined {
private static final String LARGE_IMAGE_URL = "https://jhdmyx-1251519181.cos.ap-shanghai.myqcloud.com/image/material_content-191564494842458980f5c5ae685d3440.jpg?imageView2/2/w/1080/h/10800/format/jpg"; private static final String LARGE_IMAGE_URL = "https://jhdmyx-1251519181.cos.ap-shanghai.myqcloud.com/image/material_content-191564494842458980f5c5ae685d3440.jpg?imageView2/2/w/1080/h/10800/format/jpg";
private static final String QR_CODE_URL = "https://gicinner-1251519181.cos.ap-shanghai.myqcloud.com/image/material_content-4ffc77073ca1476fb264bf1be9f11383.png"; private static final String QR_CODE_URL = "https://gicinner-1251519181.cos.ap-shanghai.myqcloud.com/image/material_content-4ffc77073ca1476fb264bf1be9f11383.png";
private static final String STORE_NAME = "门店CCA"; private static final String STORE_NAME = "门店CCA门店CCA门店CCA门店CCA门店CCA门店CCA";
private static final String GUIDE_NAME = "宇智222为您推荐"; private static final String GUIDE_NAME = "宇智222为您推荐门店CCA门店CCA门店CCA门店CCA门店CCA";
private static final String OUTPUT_PATH = "/Users/wang/Downloads/output_image5.jpg"; private static final String OUTPUT_PATH = "/Users/wang/Downloads/output_image5.jpg";
static { static {
...@@ -174,16 +184,31 @@ public class ImageCombined { ...@@ -174,16 +184,31 @@ public class ImageCombined {
// 添加门店名称,距底部88px // 添加门店名称,距底部88px
g.setColor(new Color(36, 40, 53)); g.setColor(new Color(36, 40, 53));
g.setFont(new Font("Arial", Font.PLAIN, 30)); g.setFont(new Font("Arial", Font.PLAIN, 30));
g.drawString(lineOne, 30, finalHeight - WHITE_SPACE_HEIGHT + 72); drawSingleLineText(g, lineOne, 30, finalHeight - WHITE_SPACE_HEIGHT + 72, width - 196); // 留出左右边距
// 添加推荐人信息,距底部40px // 添加推荐人信息,距底部40px
g.setColor(new Color(151, 155, 165)); g.setColor(new Color(151, 155, 165));
g.setFont(new Font("Arial", Font.PLAIN, 26)); g.setFont(new Font("Arial", Font.PLAIN, 26));
g.drawString(lineTwo, 30, finalHeight - WHITE_SPACE_HEIGHT + 120); drawSingleLineText(g, lineTwo, 30, finalHeight - WHITE_SPACE_HEIGHT + 120, width - 196); // 留出左右边距
// 添加二维码,距底部12px // 添加二维码,距底部12px
int qrBottomPadding = 12; int qrBottomPadding = 12;
g.drawImage(qrCode, width - qrWidth - qrBottomPadding, finalHeight - qrWidth - qrBottomPadding, null); g.drawImage(qrCode, width - qrWidth - qrBottomPadding, finalHeight - qrWidth - qrBottomPadding, null);
} }
private static void drawSingleLineText(Graphics2D g, String text, int x, int y, int maxWidth) {
FontMetrics metrics = g.getFontMetrics(g.getFont());
String truncatedText = text;
// 计算文本宽度并进行截断
if (metrics.stringWidth(text) > maxWidth) {
while (metrics.stringWidth(truncatedText + "...") > maxWidth && !truncatedText.isEmpty()) {
truncatedText = truncatedText.substring(0, truncatedText.length() - 2);
}
truncatedText += "..."; // 添加省略号
}
g.drawString(truncatedText, x, y);
}
} }
...@@ -6,6 +6,7 @@ import java.util.Collections; ...@@ -6,6 +6,7 @@ import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -530,7 +531,12 @@ public class MaterialApiServiceImpl implements MaterialApiService { ...@@ -530,7 +531,12 @@ public class MaterialApiServiceImpl implements MaterialApiService {
if (StringUtils.isNotBlank(cache)) { if (StringUtils.isNotBlank(cache)) {
return com.gic.api.base.commons.ServiceResponse.success(cache); return com.gic.api.base.commons.ServiceResponse.success(cache);
} }
JSONResponse json = materialService.getMaterialIdByCombined(wxEnterpriseId, combinedQDTO); Future<JSONResponse> future = null;
JSONResponse json = null;
try {
future = ImageCombined.EXECUTOR.submit(() ->
materialService.getMaterialIdByCombined(wxEnterpriseId, combinedQDTO));
json = future.get();
if (json.getErrorCode() == 0) { if (json.getErrorCode() == 0) {
String mediaId= json.getResult().toString() ; String mediaId= json.getResult().toString() ;
RedisUtil.setCache(key, mediaId, 1L, TimeUnit.DAYS); RedisUtil.setCache(key, mediaId, 1L, TimeUnit.DAYS);
...@@ -538,5 +544,9 @@ public class MaterialApiServiceImpl implements MaterialApiService { ...@@ -538,5 +544,9 @@ public class MaterialApiServiceImpl implements MaterialApiService {
}else { }else {
return com.gic.api.base.commons.ServiceResponse.failure("9999",json.getErrorMessage()) ; return com.gic.api.base.commons.ServiceResponse.failure("9999",json.getErrorMessage()) ;
} }
} catch (Exception e) {
logger.info("获取素材id失败", e);
return com.gic.api.base.commons.ServiceResponse.failure("9999", "获取图片,请稍后再试");
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment