|
|
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
|
|
|
import com.dySweetFishPlugin.redis.RedisService;
|
|
|
import com.dySweetFishPlugin.sql.TableIdService;
|
|
|
import com.dySweetFishPlugin.sql.dao.TunaService;
|
|
|
+import com.dySweetFishPlugin.tool.lang.ThreadFactoryWithNamePrefix;
|
|
|
import com.sdtool.business.dao.DesignDao;
|
|
|
import com.sdtool.common.api.NoSqlKeysService;
|
|
|
import com.sdtool.common.api.mall.DesignService;
|
|
|
@@ -46,6 +47,8 @@ import java.nio.file.Paths;
|
|
|
import java.nio.file.StandardOpenOption;
|
|
|
import java.util.*;
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.ScheduledThreadPoolExecutor;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
@Local
|
|
|
@AutoLoad(false)
|
|
|
@@ -84,6 +87,8 @@ public class DesignServiceImpl extends BaseService implements DesignService {
|
|
|
|
|
|
private static final int tempTemplateExpire = 60 * 60 * 2;
|
|
|
|
|
|
+ private final ScheduledThreadPoolExecutor pdfCallbackExecutor = new ScheduledThreadPoolExecutor(1, new ThreadFactoryWithNamePrefix("[PDF任务回调线程池]"));
|
|
|
+
|
|
|
@Override
|
|
|
public void start(AnyValue config) {
|
|
|
designDao = tunaService.generate(DesignDao.class);
|
|
|
@@ -91,6 +96,36 @@ public class DesignServiceImpl extends BaseService implements DesignService {
|
|
|
designContentRoot = appHome + File.separator + "conf" + File.separator + "designContent";
|
|
|
designOutputRoot = appHome + File.separator + "conf" + File.separator + "designOutput";
|
|
|
orderContentRoot = appHome + File.separator + "conf" + File.separator + "orderContent";
|
|
|
+
|
|
|
+ long supplierCode = 1000;//写死1000了,没必要为了这个耽误时间
|
|
|
+ String dataSourceId = "erp001";
|
|
|
+ pdfCallbackExecutor.scheduleWithFixedDelay(() -> {
|
|
|
+ String callBackStr = redisService.lpop(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_PDF_CALLBACK_LIST, supplierCode));
|
|
|
+ if (StringUtils.isNotEmpty(callBackStr)) {
|
|
|
+ logger.info("接收到PDF生成回调: " + callBackStr);
|
|
|
+
|
|
|
+ PDFCallbackInfo callbackInfo = jsonConvert.convertFrom(PDFCallbackInfo.class, callBackStr);
|
|
|
+
|
|
|
+ String orderEditStr = redisService.hget(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_ORDER_EDIT, supplierCode), String.valueOf(callbackInfo.getIdDesignOrder()));
|
|
|
+ String orderImpositionStr = redisService.hget(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_ORDER_IMPOSITION, supplierCode), String.valueOf(callbackInfo.getIdDesignOrder()));
|
|
|
+
|
|
|
+ DesignOrder orderEdit = jsonConvert.convertFrom(DesignOrder.class, orderEditStr);
|
|
|
+ DesignOrder orderImposition = jsonConvert.convertFrom(DesignOrder.class, orderImpositionStr);
|
|
|
+
|
|
|
+ orderEdit.setPdfDownloadUrl("/output/" + callbackInfo.getPdfFileName());
|
|
|
+ orderImposition.setPdfDownloadUrl("/output/" + callbackInfo.getPdfFileName());
|
|
|
+
|
|
|
+ redisService.hset(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_ORDER_EDIT, supplierCode), String.valueOf(orderEdit.getId()), orderEdit);
|
|
|
+ redisService.hset(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_ORDER_IMPOSITION, supplierCode), String.valueOf(orderImposition.getId()), orderImposition);
|
|
|
+
|
|
|
+ designDao.pdfCallbackDesignOrder(orderImposition, dataSourceId, supplierCode);
|
|
|
+ }
|
|
|
+ }, 1, 2, TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void destroy(AnyValue config) {
|
|
|
+ pdfCallbackExecutor.shutdown();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -431,7 +466,7 @@ public class DesignServiceImpl extends BaseService implements DesignService {
|
|
|
private DesignOrder convertTemplateToOrder(DesignTemplate designTemplate) {
|
|
|
DesignOrder designOrder = new DesignOrder();
|
|
|
designOrder.setIdTemplate(designTemplate.getId());
|
|
|
- designOrder.setOrderMame("[" + designTemplate.getTemplateName() + "]" + ERPUtils.parseTimeFormat(new Date(), "yyyyMMdd") + "设计订单");
|
|
|
+ designOrder.setOrderName("[" + designTemplate.getTemplateName() + "]" + ERPUtils.parseTimeFormat(new Date(), "yyyyMMddHHmmss") + "设计订单");
|
|
|
designOrder.setProductIdentity(designTemplate.getProductIdentity());
|
|
|
designOrder.setJsonContent(designTemplate.getJsonContent());
|
|
|
|
|
|
@@ -480,6 +515,12 @@ public class DesignServiceImpl extends BaseService implements DesignService {
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
|
|
|
+ //生成订单结构
|
|
|
+ DesignOrder designOrder = convertTemplateToOrder(template);
|
|
|
+ designOrder.setId(tableIdService.getTableIdMulti("deDesignOrder.id", 1, dataSourceId, String.valueOf(supplierCode)));
|
|
|
+ designOrder.setUserIdentity(String.valueOf(currentUser.getId()));
|
|
|
+ DesignOrder.create(designOrder, currentUser.getId());
|
|
|
+
|
|
|
// 获取 SVG 根元素
|
|
|
Element rootElement = document.getRootElement();
|
|
|
|
|
|
@@ -488,12 +529,42 @@ public class DesignServiceImpl extends BaseService implements DesignService {
|
|
|
taskInfo.setWidth(rootElement.attributeValue("width").replace("px", ""));
|
|
|
taskInfo.setSvgPath(fileUrl);
|
|
|
taskInfo.setSvgFileName(fileName);
|
|
|
+ taskInfo.setIdDesignOrder(designOrder.getId());
|
|
|
|
|
|
redisService.rpush(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_SVG_TASK_LIST, supplierCode), jsonConvert.convertTo(taskInfo));
|
|
|
|
|
|
- //算了别写了没人用
|
|
|
-// return this.newDesignOrder(template, dataSourceId, supplierCode, currentUser);
|
|
|
- return RetResult.successT();
|
|
|
+
|
|
|
+ //保存订单的设计文件信息
|
|
|
+ String fileNameJson = orderContentRoot + File.separator + supplierCode +
|
|
|
+ File.separator + designOrder.getId() + ".txt";
|
|
|
+ Path pathJson = Paths.get(fileNameJson);
|
|
|
+
|
|
|
+ String writeContent = "";
|
|
|
+ if (StringUtils.isNotEmpty(designOrder.getJsonContent())) {
|
|
|
+ writeContent = designOrder.getJsonContent();
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ if (!Files.exists(pathJson.getParent())) {
|
|
|
+ Files.createDirectories(pathJson.getParent());
|
|
|
+ }
|
|
|
+ Files.write(pathJson,
|
|
|
+ Collections.singleton(new StringBuilder(writeContent)),
|
|
|
+ StandardCharsets.UTF_8,
|
|
|
+ StandardOpenOption.CREATE,
|
|
|
+ StandardOpenOption.WRITE,
|
|
|
+ StandardOpenOption.TRUNCATE_EXISTING);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ redisService.hset(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_ORDER_EDIT, supplierCode), String.valueOf(designOrder.getId()), designOrder);
|
|
|
+ convertJsonObjectsToOrder(designOrder, dataSourceId, supplierCode);
|
|
|
+ designOrder.setJsonContent(fileNameJson);
|
|
|
+ redisService.hset(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_ORDER_IMPOSITION, supplierCode), String.valueOf(designOrder.getId()), designOrder);
|
|
|
+
|
|
|
+ designDao.addDesignOrder(designOrder, designOrder.getItemList(), dataSourceId, supplierCode);
|
|
|
+
|
|
|
+ return RetResult.<DesignOrder>successT().result(designOrder);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -543,7 +614,7 @@ public class DesignServiceImpl extends BaseService implements DesignService {
|
|
|
|
|
|
designOrder.setIdTemplate(redisOrder.getIdTemplate());
|
|
|
designOrder.setUserIdentity(redisOrder.getUserIdentity());
|
|
|
- designOrder.setOrderMame(redisOrder.getOrderMame());
|
|
|
+ designOrder.setOrderName(redisOrder.getOrderName());
|
|
|
designOrder.setProductIdentity(redisOrder.getProductIdentity());
|
|
|
|
|
|
DesignOrder.update(designOrder, currentUser.getId());
|