|
@@ -11,23 +11,30 @@ namespace TEAMModelOS.SDK.Models.Service
|
|
{
|
|
{
|
|
public class GenPDFService
|
|
public class GenPDFService
|
|
{
|
|
{
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// https://github.com/wuxue107/bookjs-eazy https://github.com/wuxue107/screenshot-api-server
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="azureServiceBus"></param>
|
|
|
|
+ /// <param name="azureRedis"></param>
|
|
|
|
+ /// <param name="data"></param>
|
|
|
|
+ /// <returns></returns>
|
|
public async Task<string> AddGenPdfQueue(AzureServiceBusFactory azureServiceBus , AzureRedisFactory azureRedis, GenPDFData data)
|
|
public async Task<string> AddGenPdfQueue(AzureServiceBusFactory azureServiceBus , AzureRedisFactory azureRedis, GenPDFData data)
|
|
{
|
|
{
|
|
long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
- List<PDFGenParam> genParams = new List<PDFGenParam>();
|
|
|
|
- List<PDFGenParam> dbgenParams = new List<PDFGenParam>();
|
|
|
|
|
|
+ List<PDFGenRedis> genRedis = new List<PDFGenRedis>();
|
|
|
|
+ List<PDFGenRedis> dbgenRedis = new List<PDFGenRedis>();
|
|
HashEntry[] datas = await azureRedis.GetRedisClient(8).HashGetAllAsync($"PDFGen:{data.sessionId}");
|
|
HashEntry[] datas = await azureRedis.GetRedisClient(8).HashGetAllAsync($"PDFGen:{data.sessionId}");
|
|
if (datas!= null && datas.Length > 0)
|
|
if (datas!= null && datas.Length > 0)
|
|
{
|
|
{
|
|
foreach (var item in datas)
|
|
foreach (var item in datas)
|
|
{
|
|
{
|
|
- dbgenParams.Add(item.Value.ToString().ToObject<PDFGenParam>());
|
|
|
|
|
|
+ dbgenRedis.Add(item.Value.ToString().ToObject<PDFGenRedis>());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int countProcess= 0;
|
|
int countProcess= 0;
|
|
foreach (var item in data.datas)
|
|
foreach (var item in data.datas)
|
|
{
|
|
{
|
|
- var dbData = dbgenParams.Find(x => x.id.Equals(item.id));
|
|
|
|
|
|
+ var dbData = dbgenRedis.Find(x => x.id.Equals(item.id));
|
|
if (dbData!=null)
|
|
if (dbData!=null)
|
|
{
|
|
{
|
|
|
|
|
|
@@ -43,15 +50,15 @@ namespace TEAMModelOS.SDK.Models.Service
|
|
dbData.cost=0;
|
|
dbData.cost=0;
|
|
dbData.join= now;
|
|
dbData.join= now;
|
|
dbData.wait=0;
|
|
dbData.wait=0;
|
|
- genParams.Add(dbData);
|
|
|
|
|
|
+ genRedis.Add(dbData);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- genParams.Add(new PDFGenParam { id = item.id, status=0, cost=0, wait=0, join=now });
|
|
|
|
|
|
+ genRedis.Add(new PDFGenRedis { id = item.id, status=0, cost=0, wait=0, join=now });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//过期时间 当前个数+ reddis的个数
|
|
//过期时间 当前个数+ reddis的个数
|
|
- foreach (var item in genParams)
|
|
|
|
|
|
+ foreach (var item in genRedis)
|
|
{
|
|
{
|
|
countProcess+=1;
|
|
countProcess+=1;
|
|
await azureRedis.GetRedisClient(8).HashSetAsync($"PDFGen:{data.sessionId}", item.id, item.ToJsonString());
|
|
await azureRedis.GetRedisClient(8).HashSetAsync($"PDFGen:{data.sessionId}", item.id, item.ToJsonString());
|
|
@@ -59,6 +66,8 @@ namespace TEAMModelOS.SDK.Models.Service
|
|
long expire = (data.delay+data.timeout) * countProcess ;
|
|
long expire = (data.delay+data.timeout) * countProcess ;
|
|
var tiemSpan = TimeSpan.FromMilliseconds(expire);
|
|
var tiemSpan = TimeSpan.FromMilliseconds(expire);
|
|
await azureRedis.GetRedisClient(8).KeyExpireAsync($"PDFGen:{data.sessionId}", tiemSpan);
|
|
await azureRedis.GetRedisClient(8).KeyExpireAsync($"PDFGen:{data.sessionId}", tiemSpan);
|
|
|
|
+
|
|
|
|
+
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -89,12 +98,13 @@ namespace TEAMModelOS.SDK.Models.Service
|
|
/// 数据链接
|
|
/// 数据链接
|
|
/// </summary>
|
|
/// </summary>
|
|
public string url { get; set; }
|
|
public string url { get; set; }
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
/// <summary>
|
|
/// <summary>
|
|
/// redis 存储数据,超时时间设置为status=0 的count timeout* count+ delay*count
|
|
/// redis 存储数据,超时时间设置为status=0 的count timeout* count+ delay*count
|
|
/// </summary>
|
|
/// </summary>
|
|
- public record PDFGenParam
|
|
|
|
|
|
+ public record PDFGenRedis
|
|
{
|
|
{
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 学生id
|
|
/// 学生id
|
|
@@ -117,4 +127,51 @@ namespace TEAMModelOS.SDK.Models.Service
|
|
/// </summary>
|
|
/// </summary>
|
|
public long join { get; set; }
|
|
public long join { get; set; }
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// // 拼接上接口的前缀 http://localhost:3000/ 就是完整PDF地址
|
|
|
|
+ // http://localhost:3000/pdf/1614458263411-glduu.pdf
|
|
|
|
+ // 拼接上接口的前缀 http://localhost:3000/download/可以就可生成在浏览器上的下载链接
|
|
|
|
+ // http://localhost:3000/download/pdf/1614458263411-glduu.pdf
|
|
|
|
+ // 拼接上http://localhost:3000/static/js/pdfjs/web/viewer.html?file=/pdf/1614458263411-glduu.pdf
|
|
|
|
+ // 可使用pdfjs库进行预览
|
|
|
|
+ //
|
|
|
|
+//## -e MAX_BROWSER=[num] 环境变量可选,最大的puppeteer实例数,忽略选项则默认值:1 , 值auto:[可用内存]/200M
|
|
|
|
+//## -e PDF_KEEP_DAY=[num] 自动删除num天之前产生的文件目录,默认0: 不删除文件
|
|
|
|
+ //docker run -p 13000:3000 -td --rm -e MAX_BROWSER=2 -e PDF_KEEP_DAY=1 -v ${PWD}:/screenshot-api-server/public --name=screenshot-api-server wuxue107/screenshot-api-server
|
|
|
|
+ /// </summary>
|
|
|
|
+ public record PDFGenQueue
|
|
|
|
+ {
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 学生id
|
|
|
|
+ /// </summary>
|
|
|
|
+ public string id { get; set; }
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 数据装载后的页面 要制作为PDF的网页 (pageUrl 、html 参数二选一)
|
|
|
|
+ /// </summary>
|
|
|
|
+ public string pageUrl { get; set; }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 要截图的网页HTML (pageUrl 、html 参数二选一) "html" : "<div>bookjs-eazy</div>",
|
|
|
|
+ /// </summary>
|
|
|
|
+ public string html { get; set; }
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 超时时间
|
|
|
|
+ /// </summary>
|
|
|
|
+ public long timeout { get; set; } = 30000;
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 页面完成后(checkPageCompleteJs返回为true后)延迟的时间,可选,默认:0
|
|
|
|
+ /// </summary>
|
|
|
|
+ public long delay { get; set; } = 2000;
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// // 检查页面是否渲染完成的js表达式,可选,默认: "true"
|
|
|
|
+ /// </summary>
|
|
|
|
+ public bool checkPageCompleteJs { get; set; }
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 生成会话id, 活动id
|
|
|
|
+ /// </summary>
|
|
|
|
+ public string sessionId { get; set; }
|
|
|
|
+ }
|
|
}
|
|
}
|