Veronique 1 yıl önce
ebeveyn
işleme
b8a6a875c0

+ 66 - 11
sdBusiness/src/main/java/com/sdtool/business/service/mall/DesignServiceImpl.java

@@ -325,17 +325,26 @@ public class DesignServiceImpl extends BaseService implements DesignService {
 
     @Override
     public RetResult<DesignTemplate> getDesignTemplateEdit(long id, RMap params, String outerSessionId, String dataSourceId, long supplierCode) {
-        RetResult<DesignTemplate> templateRetResult = this.getDesignTemplateEdit(id, params, dataSourceId, supplierCode);
-        if (!templateRetResult.isSuccess()) return templateRetResult;
-        DesignTemplate designTemplate = templateRetResult.getResult();
+        //这里多了一个暂存设计的需求,进来之后先用outerSessionId找一下有没有暂存的设计稿,有了就直接返回暂存,没有的话正常加载模板
+        String templateJson = redisService.get(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_TEMPLATE_SESSION, supplierCode, true)
+                + outerSessionId);
+        if (StringUtils.isNotEmpty(templateJson)) {
+            DesignTemplate template = jsonConvert.convertFrom(DesignTemplate.class, templateJson);
+            template.setJsonContent(preProcessTemplateContent(template.getJsonContent()));
+            return RetResult.<DesignTemplate>successT().result(template);
+        } else {
+            RetResult<DesignTemplate> templateRetResult = this.getDesignTemplateEdit(id, params, dataSourceId, supplierCode);
+            if (!templateRetResult.isSuccess()) return templateRetResult;
+            DesignTemplate designTemplate = templateRetResult.getResult();
 
-        //给前端预处理一下权限
-        designTemplate.setJsonContent(preProcessTemplateContent(designTemplate.getJsonContent()));
+            //给前端预处理一下权限
+            designTemplate.setJsonContent(preProcessTemplateContent(designTemplate.getJsonContent()));
 
-        //将当前临时模板记录在redis中,设置个过期时间就行了
-        redisService.setex(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_TEMPLATE_SESSION, supplierCode, true)
-                + outerSessionId, tempTemplateExpire, designTemplate);
-        return RetResult.<DesignTemplate>successT().result(designTemplate);
+            //将当前临时模板记录在redis中,设置个过期时间就行了
+            redisService.setex(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_TEMPLATE_SESSION, supplierCode, true)
+                    + outerSessionId, tempTemplateExpire, designTemplate);
+            return RetResult.<DesignTemplate>successT().result(designTemplate);
+        }
     }
 
     @Override
@@ -551,6 +560,24 @@ public class DesignServiceImpl extends BaseService implements DesignService {
     }
 
     @Override
+    public RetResult<DesignTemplate> tmpSaveUserDesign(DesignTemplate tmpTemplate, String dataSourceId, long supplierCode) {
+        String outerSessionId = tmpTemplate.getTemplateName();
+        String jsonContent = tmpTemplate.getJsonContent();
+
+        String templateJson = redisService.get(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_TEMPLATE_SESSION, supplierCode, true)
+                + outerSessionId);
+        if (StringUtils.isEmpty(templateJson))
+            return RetResult.<DesignTemplate>errorT().retinfo("当前设计已超时,请刷新后操作");
+        DesignTemplate template = jsonConvert.convertFrom(DesignTemplate.class, templateJson);
+        template.setJsonContent(jsonContent);
+
+        //将当前临时模板记录在redis中,设置个过期时间就行了
+        redisService.setex(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_TEMPLATE_SESSION, supplierCode, true)
+                + outerSessionId, tempTemplateExpire, template);
+        return RetResult.<DesignTemplate>successT();
+    }
+
+    @Override
     public RetResult<ProcessIdItem> saveCurrentUserTokenInfo(String virtualCode, String dataSourceId, long supplierCode, ERPTokenUser currentUser) {
         RMap currentToken = new RMap();
         currentToken.set("dataSourceId", dataSourceId);
@@ -597,6 +624,10 @@ public class DesignServiceImpl extends BaseService implements DesignService {
         if (StringUtils.isEmpty(templateJson))
             return RetResult.<DesignOrder>errorT().retinfo("当前设计已超时,请刷新后操作");
         DesignTemplate template = jsonConvert.convertFrom(DesignTemplate.class, templateJson);
+        //将缓存中的该session临时设计删掉了
+        redisService.del(keysService.getRedisKey(RedisKeys.KEY_DESIGNER_DESIGN_TEMPLATE_SESSION, supplierCode, true)
+                + outerSessionId);
+
         svgContent = StringEscapeUtils.unescapeJava(svgContent);
         if (svgContent.startsWith("\"") && svgContent.endsWith("\"")) {
             svgContent = svgContent.substring(1, svgContent.length() - 1);
@@ -634,8 +665,16 @@ public class DesignServiceImpl extends BaseService implements DesignService {
         //生成订单结构
         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());
+        if (currentUser != null) {
+            //后台测试
+            designOrder.setUserIdentity(String.valueOf(currentUser.getId()));
+            DesignOrder.create(designOrder, currentUser.getId());
+        } else {
+            //实际使用
+            designOrder.setUserIdentity(outerSessionId);
+            DesignOrder.create(designOrder, 999L);
+        }
+
 
         // 获取 SVG 根元素
         Element rootElement = document.getRootElement();
@@ -768,6 +807,22 @@ public class DesignServiceImpl extends BaseService implements DesignService {
     }
 
     @Override
+    public RetResult<DesignOrder> downloadDesignPDF(String outerSessionId, String dataSourceId, long supplierCode) {
+        RMap params = new RMap();
+        params.put("userIdentity", outerSessionId);
+
+        List<DesignOrder> orderList = designDao.selectDesignOrders(params, dataSourceId, supplierCode, null);
+        if (orderList.isEmpty()) return RetResult.<DesignOrder>errorT().retinfo("未找到当前用户的设计订单");
+
+        //假如多个,取最后一个
+        DesignOrder designOrder = orderList.stream().sorted(Comparator.comparingLong(DesignOrder::getId).reversed()).toList().get(0);
+
+        if (StringUtils.isBlank(designOrder.getPdfDownloadUrl()))
+            return RetResult.<DesignOrder>successT().retcode(201).retinfo("当前设计订单生成中");
+        else return RetResult.<DesignOrder>successT().result(designOrder).retinfo("success");
+    }
+
+    @Override
     public RetResult<List<DesignOrder>> queryDesignOrders(RMap params, PageFlipper pageFlipper, String dataSourceId, long supplierCode, ERPTokenUser currentUser) {
         //默认来说这里查的都是自己的设计单
         params.set("userIdentity", currentUser.getId());

+ 5 - 0
sdCommon/src/main/java/com/sdtool/common/api/mall/DesignService.java

@@ -37,6 +37,9 @@ public interface DesignService extends ScriptService {
     RetResult<DesignTemplate> updateDesignTemplateThumb(DesignTemplate template, String dataSourceId, long supplierCode, ERPTokenUser currentUser);
 
     RetResult<DesignTemplate> voidDesignTemplate(DesignTemplate template, String dataSourceId, long supplierCode, ERPTokenUser currentUser);
+
+    //暂存用户设计
+    RetResult<DesignTemplate> tmpSaveUserDesign(DesignTemplate tmpTemplate, String dataSourceId, long supplierCode);
     //endregion
 
     //region 项目转跳需要
@@ -57,6 +60,8 @@ public interface DesignService extends ScriptService {
     RetResult<DesignOrder> newDesignOrder(DesignTemplate customerDesign, String dataSourceId, long supplierCode, ERPTokenUser currentUser);
 
     RetResult<DesignOrder> updateDesignOrder(DesignOrder designOrder, String dataSourceId, long supplierCode, ERPTokenUser currentUser);
+
+    RetResult<DesignOrder> downloadDesignPDF(String outerSessionId, String dataSourceId, long supplierCode);
     //endregion
 
     //region 模板标签档案

+ 19 - 2
sdWebCore/src/main/java/com/sdtool/webcore/rest/DesignRest.java

@@ -187,10 +187,27 @@ public class DesignRest extends BaseService {
                 }, getExecutor()
         );
     }
+
+    @RestMapping(name = "tmpSaveUserDesign", auth = true, sort = 17, comment = "暂存设计模板", methods = {"POST"})
+    @WebApiBean(result = true, type = DesignTemplate.class)
+    public CompletableFuture<RMap> tmpSaveUserDesign(
+            @RestBody(comment = "模板") DesignTemplate designTemplate,
+            @RestParam(name = "&", comment = "登录用户,无需传入") ERPTokenUser currentUser,
+            @RestHeader(name = ERPHeader.HTTPHEADER_DATASOURCE) String dataSourceId,
+            @RestHeader(name = ERPHeader.HTTPHEADER_SUPPLIER) String supplierCode) {
+        return CompletableFuture.supplyAsync(
+                () -> {
+                    RetResult<DesignTemplate> result = designService.tmpSaveUserDesign(designTemplate, dataSourceId, Long.parseLong(supplierCode));
+                    if (result.isSuccess())
+                        return RMapUtils.successV2(result.getResult(), null, null);
+                    else return RMapUtils.error(HttpCode.BAD_REQUEST.value(), result.getRetinfo());
+                }, getExecutor()
+        );
+    }
     //endregion
 
     //region 设计订单
-    @RestMapping(name = "queryDesignOrders", auth = true, sort = 22, comment = "获取设计模板", methods = {"POST"})
+    @RestMapping(name = "queryDesignOrders", auth = true, sort = 22, comment = "获取设计订单", methods = {"POST"})
     @WebApiBean(result = true, type = DesignOrder.class)
     public CompletableFuture<RMap> queryDesignOrders(
             @RestParam(name = "params", comment = "搜索内容", required = false) RMap searchData,
@@ -310,7 +327,7 @@ public class DesignRest extends BaseService {
             @RestHeader(name = ERPHeader.HTTPHEADER_SUPPLIER) String supplierCode) {
         return CompletableFuture.supplyAsync(
                 () -> {
-                    RetResult<List<DesignTagType>> result = designService.queryDesignTagTypeFlatten(searchData, dataSourceId, Long.parseLong(supplierCode),null);
+                    RetResult<List<DesignTagType>> result = designService.queryDesignTagTypeFlatten(searchData, dataSourceId, Long.parseLong(supplierCode), null);
                     if (result.isSuccess())
                         return RMapUtils.successV2(result.getResult(), null, result.getPageFlipper());
                     else return RMapUtils.error(HttpCode.BAD_REQUEST.value(), result.getRetinfo());

+ 27 - 0
sdWebCore/src/main/java/com/sdtool/webcore/rest/InvokeRest.java

@@ -165,4 +165,31 @@ public class InvokeRest extends BaseService {
                 }, getExecutor()
         );
     }
+
+
+    @RestMapping(name = "downloadDesignPDF", auth = false, sort = 22, comment = "下载设计订单文件", methods = {"POST"})
+    @WebApiBean(result = true, type = DesignOrder.class)
+    public CompletableFuture<RMap> downloadDesignPDF(
+            @RestParam(name = "outerSessionId", comment = "外部网站的sessionId") String outerSessionId,
+            @RestHeader(name = ERPHeader.HTTPHEADER_DATASOURCE) String dataSourceId,
+            @RestHeader(name = ERPHeader.HTTPHEADER_SUPPLIER) String supplierCode,
+            @RestCookie(name = "ow") String clientCookie) {
+        return CompletableFuture.supplyAsync(
+                () -> {
+                    //25-02-06 他们不限制了
+//                    if (!canAccessClient(clientCookie)) {
+//                        return RMapUtils.error(HttpCode.BAD_REQUEST.value(), "无权限访问");
+//                    }
+                    RetResult<DesignOrder> result = designService.downloadDesignPDF(outerSessionId, dataSourceId, Long.parseLong(supplierCode));
+                    if (result.isSuccess())
+                        return RMapUtils.successV2(result.getResult().getPdfDownloadUrl(), null, null);
+                    else if (result.getRetcode() == 201) {
+                        //生成中
+                        return RMapUtils.error(201, result.getRetinfo());
+                    } else {
+                        return RMapUtils.error(HttpCode.BAD_REQUEST.value(), result.getRetinfo());
+                    }
+                }, getExecutor()
+        );
+    }
 }