From 8ef6a29f84802a68f04c558640f28761da1f2b6d Mon Sep 17 00:00:00 2001 From: lyd <1419499670@qq.com> Date: Tue, 16 Aug 2022 18:48:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=88=9E=E5=8F=B0=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/acs/agv/server/MagicAgvService.java | 9 + .../org/nl/acs/agv/server/NDCAgvService.java | 9 + .../nl/acs/agv/server/XianGongAgvService.java | 9 + .../nl/acs/agv/server/ZheDaAgvService.java | 9 + .../acs/config/rest/AcsConfigController.java | 8 + .../wms/service/impl/WmsToAcsServiceImpl.java | 337 +++++---- .../acs/stage/rest/StageActorController.java | 107 --- .../acs/stage/service/StageActorService.java | 103 --- .../acs/stage/service/dto/StageActorDto.java | 85 --- .../stage/service/impl/StageServiceImpl.java | 150 ----- .../java/org/nl/acs/stage/wql/QStage_01.wql | 61 -- .../rest/StageController.java | 54 +- .../rest/StageImageController.java | 30 +- .../service/StageImageService.java | 59 +- .../service/StageService.java | 84 +-- .../service/dto/StageDto.java | 15 +- .../service/dto/StageImageDto.java | 12 +- .../service/impl/StageImageServiceImpl.java | 96 +-- .../service/impl/StageServiceImpl.java} | 637 +++--------------- .../loki/service/impl/LokiServiceImpl.java | 2 +- .../quartz/task/DeviceStatusMonitor.java | 36 +- .../java/org/nl/modules/system/wql/sys.xls | Bin 192000 -> 201216 bytes .../src/main/resources/log/WmsToAcs.xml | 56 +- .../src/main/resources/logback-spring.xml | 2 +- acs/qd/package.json | 3 + acs/qd/src/api/logicflow/stage.js | 66 ++ acs/qd/src/api/logicflow/stageImage.js | 34 + acs/qd/src/api/system/param.js | 10 +- acs/qd/src/main.js | 12 +- acs/qd/src/views/monitor/logback/index.vue | 10 +- .../logicflow/editor/components/Diagram.vue | 594 ++++++++++++++++ .../editor/components/DiagramSidebar.vue | 196 ++++++ .../editor/components/DiagramToolbar.vue | 251 +++++++ .../editor/components/PropertyPanel.vue | 375 +++++++++++ .../editor/components/icon/Actor.vue | 38 ++ .../editor/components/icon/AreaSelect.vue | 15 + .../logicflow/editor/components/icon/Blod.vue | 15 + .../editor/components/icon/Circle.vue | 31 + .../editor/components/icon/ColorFill.vue | 15 + .../editor/components/icon/ColorText.vue | 15 + .../editor/components/icon/Cross.vue | 19 + .../editor/components/icon/Cylinde.vue | 27 + .../editor/components/icon/Diamond.vue | 19 + .../editor/components/icon/Divide.vue | 37 + .../editor/components/icon/DownArrow.vue | 18 + .../editor/components/icon/Ellipse.vue | 21 + .../logicflow/editor/components/icon/Font.vue | 15 + .../editor/components/icon/Heptagon.vue | 19 + .../editor/components/icon/Hexagon.vue | 19 + .../components/icon/HorizontalArrow.vue | 18 + .../editor/components/icon/LeftArrow.vue | 18 + .../logicflow/editor/components/icon/Line.vue | 15 + .../editor/components/icon/Minus.vue | 19 + .../editor/components/icon/Parallelogram.vue | 19 + .../editor/components/icon/Pentagon.vue | 19 + .../logicflow/editor/components/icon/Rect.vue | 31 + .../editor/components/icon/RectRadius.vue | 23 + .../editor/components/icon/RightArrow.vue | 18 + .../editor/components/icon/Septagon.vue | 19 + .../editor/components/icon/StepBack.vue | 16 + .../editor/components/icon/StepFoward.vue | 16 + .../editor/components/icon/Table.vue | 158 +++++ .../logicflow/editor/components/icon/Text.vue | 46 ++ .../editor/components/icon/Times.vue | 19 + .../editor/components/icon/Trapezoid.vue | 19 + .../editor/components/icon/Triangle.vue | 19 + .../editor/components/icon/UpArrow.vue | 19 + .../editor/components/icon/VerticalArrow.vue | 18 + .../editor/components/icon/ZoomIn.vue | 16 + .../editor/components/icon/ZoomOut.vue | 16 + .../components/node/arrow/DownArrowNode.js | 49 ++ .../node/arrow/HorizontalArrowNode.js | 56 ++ .../editor/components/node/arrow/LeftArrow.js | 48 ++ .../components/node/arrow/RightArrow.js | 50 ++ .../components/node/arrow/UpArrowNode.js | 49 ++ .../node/arrow/VerticalArrowNode.js | 56 ++ .../editor/components/node/basic/BaseNode.js | 16 + .../components/node/basic/CircleNode.js | 33 + .../components/node/basic/DiamondNode.js | 35 + .../components/node/basic/EllipseNode.js | 19 + .../editor/components/node/basic/RectNode.js | 27 + .../components/node/basic/RectRadiusNode.js | 14 + .../editor/components/node/basic/TextNode.js | 37 + .../editor/components/node/edge/Bezier.js | 26 + .../editor/components/node/edge/Line.js | 26 + .../editor/components/node/edge/Polyline.js | 26 + .../components/node/getShapeStyleUtil.js | 70 ++ .../editor/components/node/html/htmlNode.js | 89 +++ .../logicflow/editor/components/node/index.js | 74 ++ .../editor/components/node/path/ActorNode.js | 95 +++ .../editor/components/node/path/CrossNode.js | 65 ++ .../components/node/path/CylindeNode.js | 92 +++ .../editor/components/node/path/DivideNode.js | 83 +++ .../components/node/path/HeptagonNode.js | 61 ++ .../components/node/path/HexagonNode.js | 59 ++ .../editor/components/node/path/MinusNode.js | 57 ++ .../components/node/path/ParallelogramNode.js | 57 ++ .../components/node/path/PentagonNode.js | 58 ++ .../components/node/path/SeptagonNode.js | 60 ++ .../editor/components/node/path/Star.js | 40 ++ .../editor/components/node/path/TimesNode.js | 65 ++ .../components/node/path/TrapezoidNode.js | 57 ++ .../components/node/path/TriangleNode.js | 47 ++ .../system/logicflow/editor/constant/index.js | 69 ++ .../system/logicflow/editor/image/agv.svg | 60 ++ .../logicflow/editor/image/icon_alert.png | Bin 0 -> 1649 bytes .../system/logicflow/editor/image/托盘.svg | 14 + .../views/system/logicflow/editor/index.vue | 34 + .../views/system/logicflow/image/index.vue | 310 +++++++++ acs/qd/src/views/system/logicflow/index.vue | 129 ++++ .../views/system/logicflow/monitor/index.vue | 559 +++++++++++++++ 111 files changed, 5803 insertions(+), 1473 deletions(-) create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/MagicAgvService.java create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java create mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/ZheDaAgvService.java delete mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/rest/StageActorController.java delete mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/StageActorService.java delete mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/dto/StageActorDto.java delete mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/impl/StageServiceImpl.java delete mode 100644 acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/wql/QStage_01.wql rename acs/hd/nladmin-system/src/main/java/org/nl/{acs/stage => logicflow}/rest/StageController.java (62%) rename acs/hd/nladmin-system/src/main/java/org/nl/{acs/stage => logicflow}/rest/StageImageController.java (76%) rename acs/hd/nladmin-system/src/main/java/org/nl/{acs/stage => logicflow}/service/StageImageService.java (50%) rename acs/hd/nladmin-system/src/main/java/org/nl/{acs/stage => logicflow}/service/StageService.java (62%) rename acs/hd/nladmin-system/src/main/java/org/nl/{acs/stage => logicflow}/service/dto/StageDto.java (81%) rename acs/hd/nladmin-system/src/main/java/org/nl/{acs/stage => logicflow}/service/dto/StageImageDto.java (88%) rename acs/hd/nladmin-system/src/main/java/org/nl/{acs/stage => logicflow}/service/impl/StageImageServiceImpl.java (51%) rename acs/hd/nladmin-system/src/main/java/org/nl/{acs/stage/service/impl/StageActorServiceImpl.java => logicflow/service/impl/StageServiceImpl.java} (74%) create mode 100644 acs/qd/src/api/logicflow/stage.js create mode 100644 acs/qd/src/api/logicflow/stageImage.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/Diagram.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/DiagramSidebar.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/DiagramToolbar.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/PropertyPanel.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Actor.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/AreaSelect.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Blod.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Circle.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/ColorFill.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/ColorText.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Cross.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Cylinde.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Diamond.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Divide.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/DownArrow.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Ellipse.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Font.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Heptagon.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Hexagon.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/HorizontalArrow.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/LeftArrow.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Line.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Minus.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Parallelogram.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Pentagon.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Rect.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/RectRadius.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/RightArrow.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Septagon.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/StepBack.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/StepFoward.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Table.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Text.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Times.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Trapezoid.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/Triangle.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/UpArrow.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/VerticalArrow.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/ZoomIn.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/icon/ZoomOut.vue create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/arrow/DownArrowNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/arrow/HorizontalArrowNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/arrow/LeftArrow.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/arrow/RightArrow.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/arrow/UpArrowNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/arrow/VerticalArrowNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/basic/BaseNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/basic/CircleNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/basic/DiamondNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/basic/EllipseNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/basic/RectNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/basic/RectRadiusNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/basic/TextNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/edge/Bezier.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/edge/Line.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/edge/Polyline.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/getShapeStyleUtil.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/html/htmlNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/index.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/ActorNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/CrossNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/CylindeNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/DivideNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/HeptagonNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/HexagonNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/MinusNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/ParallelogramNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/PentagonNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/SeptagonNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/Star.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/TimesNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/TrapezoidNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/components/node/path/TriangleNode.js create mode 100644 acs/qd/src/views/system/logicflow/editor/constant/index.js create mode 100644 acs/qd/src/views/system/logicflow/editor/image/agv.svg create mode 100644 acs/qd/src/views/system/logicflow/editor/image/icon_alert.png create mode 100644 acs/qd/src/views/system/logicflow/editor/image/托盘.svg create mode 100644 acs/qd/src/views/system/logicflow/editor/index.vue create mode 100644 acs/qd/src/views/system/logicflow/image/index.vue create mode 100644 acs/qd/src/views/system/logicflow/index.vue create mode 100644 acs/qd/src/views/system/logicflow/monitor/index.vue diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/MagicAgvService.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/MagicAgvService.java new file mode 100644 index 0000000..1b9f0e2 --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/MagicAgvService.java @@ -0,0 +1,9 @@ +package org.nl.acs.agv.server; + +/** + * @Author: lyd + * @Description: + * @Date: 2022-08-15 + */ +public interface MagicAgvService { +} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java new file mode 100644 index 0000000..4b7ff47 --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java @@ -0,0 +1,9 @@ +package org.nl.acs.agv.server; + +/** + * @Author: lyd + * @Description: + * @Date: 2022-08-15 + */ +public interface NDCAgvService { +} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java new file mode 100644 index 0000000..f1a84ee --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/XianGongAgvService.java @@ -0,0 +1,9 @@ +package org.nl.acs.agv.server; + +/** + * @Author: lyd + * @Description: + * @Date: 2022-08-15 + */ +public interface XianGongAgvService { +} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/ZheDaAgvService.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/ZheDaAgvService.java new file mode 100644 index 0000000..70285d2 --- /dev/null +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/agv/server/ZheDaAgvService.java @@ -0,0 +1,9 @@ +package org.nl.acs.agv.server; + +/** + * @Author: lyd + * @Description: + * @Date: 2022-08-15 + */ +public interface ZheDaAgvService { +} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/config/rest/AcsConfigController.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/config/rest/AcsConfigController.java index 5290091..e6562d5 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/config/rest/AcsConfigController.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/config/rest/AcsConfigController.java @@ -82,4 +82,12 @@ public class AcsConfigController { return new ResponseEntity<>(acsConfigService.findConfigFromCache(), HttpStatus.OK); } + @PostMapping("/getStageCodeByCode") + @Log("根据编码获取舞台编码") + @ApiOperation("根据编码获取舞台编码") + public ResponseEntity getStageCodeByCode(@RequestBody String code) { + System.out.println(code); + return new ResponseEntity<>(acsConfigService.findByCode(code), HttpStatus.CREATED); + } + } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index 23fe5ca..426d040 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -59,6 +59,7 @@ import org.nl.acs.task.service.dto.TaskDto; import org.nl.exception.WDKException; import org.nl.utils.SpringContextHolder; import org.nl.wql.core.bean.WQLObject; +import org.slf4j.MDC; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -77,12 +78,15 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { private final RouteLineService RouteLineService; private final ProduceshiftorderService produceshiftorderService; + private String log_file_type = "log_file_type"; + private String log_type = "WMSToACS"; + @Override public Map createFromWms(String param) { JSONArray tasks = JSONArray.parseArray(param); JSONObject resultJson = new JSONObject(); log.info("createFromWms--------------:输入参数:" + tasks.toString()); - try{ + try { JSONArray errArr = new JSONArray(); for (int i = 0; i < tasks.size(); i++) { JSONObject task = tasks.getJSONObject(i); @@ -181,7 +185,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { nextjo.put("batch", ""); nextjo.put("islock", "false"); DeviceService.changeDeviceStatus(nextjo); - TaskDto task_dto = jo.toJavaObject(TaskDto.class); + TaskDto task_dto = jo.toJavaObject(TaskDto.class); try { TaskService.create(task_dto); } catch (Exception e) { @@ -259,115 +263,122 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { @Override public Map createOrder(String param) throws Exception { - JSONArray orders = JSONArray.parseArray(param); - log.info("createOrder--------------:输入参数:" + orders.toString()); + try { + MDC.put(log_file_type, log_type); + JSONArray orders = JSONArray.parseArray(param); + log.info("createOrder--------------:输入参数:"); - for (int i = 0; i < orders.size(); i++) { - Boolean is_flag = false; + for (int i = 0; i < orders.size(); i++) { + Boolean is_flag = false; - JSONObject json = orders.getJSONObject(i); - String producetask_code = json.getString("producetask_code"); - String device_code = json.getString("device_code"); - String product_code = json.getString("product_code"); - String material_code = json.getString("material_code"); - String material_name = json.getString("material_name"); - String cust_code = json.getString("cust_code"); - String cust_name = json.getString("cust_name"); - String model = json.getString("model"); - String molten_pool = json.getString("molten_pool"); - String weight = json.getString("weight"); - String qty = json.getString("plan_qty"); + JSONObject json = orders.getJSONObject(i); + String producetask_code = json.getString("producetask_code"); + String device_code = json.getString("device_code"); + String product_code = json.getString("product_code"); + String material_code = json.getString("material_code"); + String material_name = json.getString("material_name"); + String cust_code = json.getString("cust_code"); + String cust_name = json.getString("cust_name"); + String model = json.getString("model"); + String molten_pool = json.getString("molten_pool"); + String weight = json.getString("weight"); + String qty = json.getString("plan_qty"); - if (StrUtil.isEmpty(producetask_code)) { - throw new WDKException("工单号不能为空"); + if (StrUtil.isEmpty(producetask_code)) { + throw new WDKException("工单号不能为空"); + } + + Device device = DeviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device)) { + throw new Exception("未找到对应设备:" + device_code); + } + + LnshMixingMillDeviceDriver lnshMixingMillDeviceDriver; + LnshPressDeviceDriver lnshPressDeviceDriver; + LnshPackagePalletManipulatorDeviceDriver lnshPackagePalletManipulatorDeviceDriver; + LnshPalletizingManipulatorDeviceDriver lnshPalletizingManipulatorDeviceDriver; + if (device.getDeviceDriver() instanceof LnshMixingMillDeviceDriver) { + lnshMixingMillDeviceDriver = (LnshMixingMillDeviceDriver) device.getDeviceDriver(); + if (StrUtil.isEmpty(qty)) { + throw new WDKException("重量不能为空"); + } + if (StrUtil.isEmpty(material_code)) { + throw new WDKException("物料编号不能为空!"); + } + lnshMixingMillDeviceDriver.writing("to_order_No", producetask_code); + lnshMixingMillDeviceDriver.writing("to_weight", qty); + lnshMixingMillDeviceDriver.writing("to_material_code", material_code); + is_flag = true; + } + if (device.getDeviceDriver() instanceof LnshPressDeviceDriver) { + lnshPressDeviceDriver = (LnshPressDeviceDriver) device.getDeviceDriver(); + if (StrUtil.isEmpty(qty)) { + throw new WDKException("数量不能为空"); + } + if (StrUtil.isEmpty(material_code)) { + throw new WDKException("物料编号不能为空!"); + } + lnshPressDeviceDriver.writing("to_order_No", producetask_code); + lnshPressDeviceDriver.writing("to_qty", qty); + lnshPressDeviceDriver.writing("to_material_code", material_code); + is_flag = true; + } + if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { + lnshPalletizingManipulatorDeviceDriver = (LnshPalletizingManipulatorDeviceDriver) device.getDeviceDriver(); + if (StrUtil.isEmpty(qty)) { + throw new WDKException("数量不能为空"); + } + if (StrUtil.isEmpty(material_code)) { + throw new WDKException("物料编号不能为空!"); + } + lnshPalletizingManipulatorDeviceDriver.writing("to_order_No", producetask_code); + lnshPalletizingManipulatorDeviceDriver.writing("to_material_qty", qty); + lnshPalletizingManipulatorDeviceDriver.writing("to_material_code", material_code); + is_flag = true; + } + if (device.getDeviceDriver() instanceof LnshPackagePalletManipulatorDeviceDriver) { + lnshPackagePalletManipulatorDeviceDriver = (LnshPackagePalletManipulatorDeviceDriver) device.getDeviceDriver(); + if (StrUtil.isEmpty(qty)) { + throw new WDKException("数量不能为空"); + } + if (StrUtil.isEmpty(material_code)) { + throw new WDKException("物料编号不能为空!"); + } + lnshPackagePalletManipulatorDeviceDriver.writing("to_order_No", producetask_code); + lnshPackagePalletManipulatorDeviceDriver.writing("to_material_qty", qty); + lnshPackagePalletManipulatorDeviceDriver.writing("to_material_code", material_code); + is_flag = true; + } + //下发成功后,写入工单信息表记录 + if (is_flag) { + ProduceshiftorderDto dto = new ProduceshiftorderDto(); + dto.setOrder_code(producetask_code); + dto.setProduct_code(product_code); + dto.setDevice_code(device_code); + dto.setOrder_status("1"); + dto.setMaterial_code(material_code); + dto.setMaterial_name(material_name); + dto.setCust_code(cust_code); + dto.setCust_name(cust_name); + dto.setModel(model); + dto.setMolten_pool(molten_pool); + dto.setWeight(weight); + dto.setQty(qty); + produceshiftorderService.create(dto); + } } - Device device = DeviceAppService.findDeviceByCode(device_code); - if (ObjectUtil.isEmpty(device)) { - throw new Exception("未找到对应设备:" + device_code); - } + JSONObject resultJson = new JSONObject(); + resultJson.put("status", HttpStatus.OK); + resultJson.put("message", "操作成功"); + resultJson.put("data", new JSONObject()); + log.info("createOrder--------------:输出参数{}", param); + return resultJson; - LnshMixingMillDeviceDriver lnshMixingMillDeviceDriver; - LnshPressDeviceDriver lnshPressDeviceDriver; - LnshPackagePalletManipulatorDeviceDriver lnshPackagePalletManipulatorDeviceDriver; - LnshPalletizingManipulatorDeviceDriver lnshPalletizingManipulatorDeviceDriver; - if (device.getDeviceDriver() instanceof LnshMixingMillDeviceDriver) { - lnshMixingMillDeviceDriver = (LnshMixingMillDeviceDriver) device.getDeviceDriver(); - if (StrUtil.isEmpty(qty)) { - throw new WDKException("重量不能为空"); - } - if (StrUtil.isEmpty(material_code)) { - throw new WDKException("物料编号不能为空!"); - } - lnshMixingMillDeviceDriver.writing("to_order_No",producetask_code); - lnshMixingMillDeviceDriver.writing("to_weight",qty); - lnshMixingMillDeviceDriver.writing("to_material_code",material_code); - is_flag = true; - } - if (device.getDeviceDriver() instanceof LnshPressDeviceDriver) { - lnshPressDeviceDriver = (LnshPressDeviceDriver) device.getDeviceDriver(); - if (StrUtil.isEmpty(qty)) { - throw new WDKException("数量不能为空"); - } - if (StrUtil.isEmpty(material_code)) { - throw new WDKException("物料编号不能为空!"); - } - lnshPressDeviceDriver.writing("to_order_No",producetask_code); - lnshPressDeviceDriver.writing("to_qty",qty); - lnshPressDeviceDriver.writing("to_material_code",material_code); - is_flag = true; - } - if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { - lnshPalletizingManipulatorDeviceDriver = (LnshPalletizingManipulatorDeviceDriver) device.getDeviceDriver(); - if (StrUtil.isEmpty(qty)) { - throw new WDKException("数量不能为空"); - } - if (StrUtil.isEmpty(material_code)) { - throw new WDKException("物料编号不能为空!"); - } - lnshPalletizingManipulatorDeviceDriver.writing("to_order_No",producetask_code); - lnshPalletizingManipulatorDeviceDriver.writing("to_material_qty",qty); - lnshPalletizingManipulatorDeviceDriver.writing("to_material_code",material_code); - is_flag = true; - } - if (device.getDeviceDriver() instanceof LnshPackagePalletManipulatorDeviceDriver) { - lnshPackagePalletManipulatorDeviceDriver = (LnshPackagePalletManipulatorDeviceDriver) device.getDeviceDriver(); - if (StrUtil.isEmpty(qty)) { - throw new WDKException("数量不能为空"); - } - if (StrUtil.isEmpty(material_code)) { - throw new WDKException("物料编号不能为空!"); - } - lnshPackagePalletManipulatorDeviceDriver.writing("to_order_No",producetask_code); - lnshPackagePalletManipulatorDeviceDriver.writing("to_material_qty",qty); - lnshPackagePalletManipulatorDeviceDriver.writing("to_material_code",material_code); - is_flag = true; - } - //下发成功后,写入工单信息表记录 - if (is_flag) { - ProduceshiftorderDto dto = new ProduceshiftorderDto(); - dto.setOrder_code(producetask_code); - dto.setProduct_code(product_code); - dto.setDevice_code(device_code); - dto.setOrder_status("1"); - dto.setMaterial_code(material_code); - dto.setMaterial_name(material_name); - dto.setCust_code(cust_code); - dto.setCust_name(cust_name); - dto.setModel(model); - dto.setMolten_pool(molten_pool); - dto.setWeight(weight); - dto.setQty(qty); - produceshiftorderService.create(dto); - } + } finally { + MDC.remove(log_file_type); } - JSONObject resultJson = new JSONObject(); - resultJson.put("status", HttpStatus.OK); - resultJson.put("message", "操作成功"); - resultJson.put("data", new JSONObject()); - log.info("createOrder--------------:输出参数" + resultJson.toString()); - return resultJson; } @Override @@ -404,9 +415,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { electricFenceDeviceDriver = (ElectricFenceDeviceDriver) device.getDeviceDriver(); if (electricFenceDeviceDriver.getSuspended()) { throw new RuntimeException("交通管制无法进入"); - } else if (StrUtil.equals(type,"1")) { + } else if (StrUtil.equals(type, "1")) { electricFenceDeviceDriver.setSuspended(true); - } else if (StrUtil.equals(type,"2")) { + } else if (StrUtil.equals(type, "2")) { electricFenceDeviceDriver.setSuspended(false); } } @@ -421,7 +432,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { @Override public Map putAction(String jsonObject) throws Exception { - JSONArray datas = JSONArray.parseArray(jsonObject); + JSONArray datas = JSONArray.parseArray(jsonObject); log.info("putAction--------------:输入参数" + datas.toString()); for (int i = 0; i < datas.size(); i++) { JSONObject data = datas.getJSONObject(i); @@ -593,9 +604,8 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("material", lnshMixingMillDeviceDriver.getMaterial()); jo.put("order_No", lnshMixingMillDeviceDriver.getOrder_No()); jo.put("mix_num", lnshMixingMillDeviceDriver.getMix_num()); - } - else if (device.getDeviceDriver() instanceof LnshPressDeviceDriver ) { - lnshPressDeviceDriver = (LnshPressDeviceDriver ) device.getDeviceDriver(); + } else if (device.getDeviceDriver() instanceof LnshPressDeviceDriver) { + lnshPressDeviceDriver = (LnshPressDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPressDeviceDriver.getMode()); jo.put("status", lnshPressDeviceDriver.getStatus()); @@ -613,8 +623,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("qualified", lnshPressDeviceDriver.getQualified()); jo.put("unqualified", lnshPressDeviceDriver.getUnqualified()); jo.put("order_No", lnshPressDeviceDriver.getOrder_No()); - } - else if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { lnshPalletizingManipulatorDeviceDriver = (LnshPalletizingManipulatorDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPalletizingManipulatorDeviceDriver.getMode()); @@ -629,8 +638,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("specifications", lnshPalletizingManipulatorDeviceDriver.getSpecifications()); jo.put("isError", lnshPalletizingManipulatorDeviceDriver.getIserror()); jo.put("message", lnshPalletizingManipulatorDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshKilnTrussDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshKilnTrussDeviceDriver) { lnshKilnTrussDeviceDriver = (LnshKilnTrussDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshKilnTrussDeviceDriver.getMode()); @@ -643,8 +651,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("error_time", lnshKilnTrussDeviceDriver.getError_time()); jo.put("isError", lnshKilnTrussDeviceDriver.getIserror()); jo.put("message", lnshKilnTrussDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshKilnLaneDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshKilnLaneDeviceDriver) { lnshKilnLaneDeviceDriver = (LnshKilnLaneDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshKilnLaneDeviceDriver.getMode()); @@ -660,8 +667,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("nullCar_qty", lnshKilnLaneDeviceDriver.getNullCar_qty()); jo.put("burning_car_qty", lnshKilnLaneDeviceDriver.getBurning_car_qty()); jo.put("message", lnshKilnLaneDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshOutKilnTrussDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshOutKilnTrussDeviceDriver) { lnshOutKilnTrussDeviceDriver = (LnshOutKilnTrussDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshOutKilnTrussDeviceDriver.getMode()); @@ -677,8 +683,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("error_time", lnshOutKilnTrussDeviceDriver.getError_time()); jo.put("isError", lnshOutKilnTrussDeviceDriver.getIserror()); jo.put("message", lnshOutKilnTrussDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshFoldDiscSiteDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshFoldDiscSiteDeviceDriver) { lnshFoldDiscSiteDeviceDriver = (LnshFoldDiscSiteDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshFoldDiscSiteDeviceDriver.getMode()); @@ -693,8 +698,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("container_qty", lnshFoldDiscSiteDeviceDriver.getContainer_qty()); jo.put("isError", lnshFoldDiscSiteDeviceDriver.getIserror()); jo.put("message", lnshFoldDiscSiteDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshPalletStorageDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPalletStorageDeviceDriver) { lnshPalletStorageDeviceDriver = (LnshPalletStorageDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPalletStorageDeviceDriver.getMode()); @@ -710,8 +714,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("total_container", lnshPalletStorageDeviceDriver.getTotal_container()); jo.put("isError", lnshPalletStorageDeviceDriver.getIserror()); jo.put("message", lnshPalletStorageDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshPackagePalletManipulatorDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPackagePalletManipulatorDeviceDriver) { lnshPackagePalletManipulatorDeviceDriver = (LnshPackagePalletManipulatorDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPackagePalletManipulatorDeviceDriver.getMode()); @@ -732,8 +735,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("order_No", lnshPackagePalletManipulatorDeviceDriver.getOrder_No()); jo.put("isError", lnshPackagePalletManipulatorDeviceDriver.getIserror()); jo.put("message", lnshPackagePalletManipulatorDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof RljnPackagePalletSplitManipulatorDeviceDriver) { + } else if (device.getDeviceDriver() instanceof RljnPackagePalletSplitManipulatorDeviceDriver) { rljnPackagePalletSplitManipulatorDeviceDriver = (RljnPackagePalletSplitManipulatorDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", rljnPackagePalletSplitManipulatorDeviceDriver.getMode()); @@ -756,8 +758,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("total_split", rljnPackagePalletSplitManipulatorDeviceDriver.getTotal_split()); jo.put("isError", rljnPackagePalletSplitManipulatorDeviceDriver.getIserror()); jo.put("message", rljnPackagePalletSplitManipulatorDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshLabelingMachineDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshLabelingMachineDeviceDriver) { lnshLabelingMachineDeviceDriver = (LnshLabelingMachineDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshLabelingMachineDeviceDriver.getMode()); @@ -771,8 +772,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("labeling_qty", lnshLabelingMachineDeviceDriver.getLabeling_qty()); jo.put("isError", lnshLabelingMachineDeviceDriver.getIserror()); jo.put("message", lnshLabelingMachineDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshSplitManipulatorDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshSplitManipulatorDeviceDriver) { lnshSplitManipulatorDeviceDriver = (LnshSplitManipulatorDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshSplitManipulatorDeviceDriver.getMode()); @@ -791,8 +791,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("error_time", lnshSplitManipulatorDeviceDriver.getError_time()); jo.put("isError", lnshSplitManipulatorDeviceDriver.getIserror()); jo.put("message", lnshSplitManipulatorDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshPackageLineDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPackageLineDeviceDriver) { lnshPackageLineDeviceDriver = (LnshPackageLineDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPackageLineDeviceDriver.getMode()); @@ -805,8 +804,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("barcode", lnshPackageLineDeviceDriver.getBarcode()); jo.put("isError", lnshPackageLineDeviceDriver.getIserror()); jo.put("message", lnshPackageLineDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshLaminatingMachineDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshLaminatingMachineDeviceDriver) { lnshLaminatingMachineDeviceDriver = (LnshLaminatingMachineDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshLaminatingMachineDeviceDriver.getMode()); @@ -818,8 +816,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("isOnline", lnshLaminatingMachineDeviceDriver.getIsonline()); jo.put("isError", lnshLaminatingMachineDeviceDriver.getIserror()); jo.put("message", lnshLaminatingMachineDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshRGVDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshRGVDeviceDriver) { lnshRGVDeviceDriver = (LnshRGVDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshRGVDeviceDriver.getMode()); @@ -859,7 +856,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { throw new Exception("未找到对应设备:" + device_code); } - if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { + if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", standardAutodoorDeviceDriver.getMode()); @@ -868,16 +865,16 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("error", standardAutodoorDeviceDriver.getError()); jo.put("isError", standardAutodoorDeviceDriver.getIserror()); } else if (device.getDeviceDriver() instanceof StandardCoveyorMonitorDeviceDriver) { - standardCoveyorMonitorDeviceDriver = (StandardCoveyorMonitorDeviceDriver) device.getDeviceDriver(); - jo.put("device_code", device.getDevice_code()); - jo.put("mode", standardCoveyorMonitorDeviceDriver.getMode()); - jo.put("move", standardCoveyorMonitorDeviceDriver.getMove()); - jo.put("hasGoods", standardCoveyorMonitorDeviceDriver.getHasGoods()); - jo.put("isOnline", standardCoveyorMonitorDeviceDriver.getIsonline()); - jo.put("error", standardCoveyorMonitorDeviceDriver.getError()); - jo.put("isError", standardCoveyorMonitorDeviceDriver.getIserror()); - jo.put("message", standardCoveyorMonitorDeviceDriver.getMessage()); - //普通站点 + standardCoveyorMonitorDeviceDriver = (StandardCoveyorMonitorDeviceDriver) device.getDeviceDriver(); + jo.put("device_code", device.getDevice_code()); + jo.put("mode", standardCoveyorMonitorDeviceDriver.getMode()); + jo.put("move", standardCoveyorMonitorDeviceDriver.getMove()); + jo.put("hasGoods", standardCoveyorMonitorDeviceDriver.getHasGoods()); + jo.put("isOnline", standardCoveyorMonitorDeviceDriver.getIsonline()); + jo.put("error", standardCoveyorMonitorDeviceDriver.getError()); + jo.put("isError", standardCoveyorMonitorDeviceDriver.getIserror()); + jo.put("message", standardCoveyorMonitorDeviceDriver.getMessage()); + //普通站点 } else if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); @@ -937,7 +934,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("isError", standardPhotoelectricInspectSiteDeviceDriver.getIserror()); jo.put("container", standardPhotoelectricInspectSiteDeviceDriver.getContainer()); jo.put("message", standardPhotoelectricInspectSiteDeviceDriver.getMessage()); - }else if (device.getDeviceDriver() instanceof LnshStationDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshStationDeviceDriver) { lnshStationDeviceDriver = (LnshStationDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshStationDeviceDriver.getMode()); @@ -957,7 +954,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("batch", lnshStationDeviceDriver.getBatch()); jo.put("pallet_type", lnshStationDeviceDriver.getContainer_type()); - } else if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver) { lnshPalletizingManipulatorSiteDeviceDriver = (LnshPalletizingManipulatorSiteDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPalletizingManipulatorSiteDeviceDriver.getMode()); @@ -1012,9 +1009,8 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("material", lnshMixingMillDeviceDriver.getMaterial()); jo.put("order_No", lnshMixingMillDeviceDriver.getOrder_No()); jo.put("mix_num", lnshMixingMillDeviceDriver.getMix_num()); - } - else if (device.getDeviceDriver() instanceof LnshPressDeviceDriver ) { - lnshPressDeviceDriver = (LnshPressDeviceDriver ) device.getDeviceDriver(); + } else if (device.getDeviceDriver() instanceof LnshPressDeviceDriver) { + lnshPressDeviceDriver = (LnshPressDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPressDeviceDriver.getMode()); jo.put("status", lnshPressDeviceDriver.getStatus()); @@ -1032,8 +1028,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("qualified", lnshPressDeviceDriver.getQualified()); jo.put("unqualified", lnshPressDeviceDriver.getUnqualified()); jo.put("order_No", lnshPressDeviceDriver.getOrder_No()); - } - else if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { lnshPalletizingManipulatorDeviceDriver = (LnshPalletizingManipulatorDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPalletizingManipulatorDeviceDriver.getMode()); @@ -1048,8 +1043,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("specifications", lnshPalletizingManipulatorDeviceDriver.getSpecifications()); jo.put("isError", lnshPalletizingManipulatorDeviceDriver.getIserror()); jo.put("message", lnshPalletizingManipulatorDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshKilnTrussDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshKilnTrussDeviceDriver) { lnshKilnTrussDeviceDriver = (LnshKilnTrussDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshKilnTrussDeviceDriver.getMode()); @@ -1062,8 +1056,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("error_time", lnshKilnTrussDeviceDriver.getError_time()); jo.put("isError", lnshKilnTrussDeviceDriver.getIserror()); jo.put("message", lnshKilnTrussDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshKilnLaneDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshKilnLaneDeviceDriver) { lnshKilnLaneDeviceDriver = (LnshKilnLaneDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshKilnLaneDeviceDriver.getMode()); @@ -1079,8 +1072,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("nullCar_qty", lnshKilnLaneDeviceDriver.getNullCar_qty()); jo.put("burning_car_qty", lnshKilnLaneDeviceDriver.getBurning_car_qty()); jo.put("message", lnshKilnLaneDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshOutKilnTrussDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshOutKilnTrussDeviceDriver) { lnshOutKilnTrussDeviceDriver = (LnshOutKilnTrussDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshOutKilnTrussDeviceDriver.getMode()); @@ -1096,8 +1088,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("error_time", lnshOutKilnTrussDeviceDriver.getError_time()); jo.put("isError", lnshOutKilnTrussDeviceDriver.getIserror()); jo.put("message", lnshOutKilnTrussDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshFoldDiscSiteDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshFoldDiscSiteDeviceDriver) { lnshFoldDiscSiteDeviceDriver = (LnshFoldDiscSiteDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshFoldDiscSiteDeviceDriver.getMode()); @@ -1112,8 +1103,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("container_qty", lnshFoldDiscSiteDeviceDriver.getContainer_qty()); jo.put("isError", lnshFoldDiscSiteDeviceDriver.getIserror()); jo.put("message", lnshFoldDiscSiteDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshPalletStorageDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPalletStorageDeviceDriver) { lnshPalletStorageDeviceDriver = (LnshPalletStorageDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPalletStorageDeviceDriver.getMode()); @@ -1129,8 +1119,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("total_container", lnshPalletStorageDeviceDriver.getTotal_container()); jo.put("isError", lnshPalletStorageDeviceDriver.getIserror()); jo.put("message", lnshPalletStorageDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshPackagePalletManipulatorDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPackagePalletManipulatorDeviceDriver) { lnshPackagePalletManipulatorDeviceDriver = (LnshPackagePalletManipulatorDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPackagePalletManipulatorDeviceDriver.getMode()); @@ -1151,8 +1140,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("order_No", lnshPackagePalletManipulatorDeviceDriver.getOrder_No()); jo.put("isError", lnshPackagePalletManipulatorDeviceDriver.getIserror()); jo.put("message", lnshPackagePalletManipulatorDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof RljnPackagePalletSplitManipulatorDeviceDriver) { + } else if (device.getDeviceDriver() instanceof RljnPackagePalletSplitManipulatorDeviceDriver) { rljnPackagePalletSplitManipulatorDeviceDriver = (RljnPackagePalletSplitManipulatorDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", rljnPackagePalletSplitManipulatorDeviceDriver.getMode()); @@ -1175,8 +1163,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("total_split", rljnPackagePalletSplitManipulatorDeviceDriver.getTotal_split()); jo.put("isError", rljnPackagePalletSplitManipulatorDeviceDriver.getIserror()); jo.put("message", rljnPackagePalletSplitManipulatorDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshLabelingMachineDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshLabelingMachineDeviceDriver) { lnshLabelingMachineDeviceDriver = (LnshLabelingMachineDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshLabelingMachineDeviceDriver.getMode()); @@ -1190,8 +1177,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("labeling_qty", lnshLabelingMachineDeviceDriver.getLabeling_qty()); jo.put("isError", lnshLabelingMachineDeviceDriver.getIserror()); jo.put("message", lnshLabelingMachineDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshSplitManipulatorDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshSplitManipulatorDeviceDriver) { lnshSplitManipulatorDeviceDriver = (LnshSplitManipulatorDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshSplitManipulatorDeviceDriver.getMode()); @@ -1210,8 +1196,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("error_time", lnshSplitManipulatorDeviceDriver.getError_time()); jo.put("isError", lnshSplitManipulatorDeviceDriver.getIserror()); jo.put("message", lnshSplitManipulatorDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshPackageLineDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPackageLineDeviceDriver) { lnshPackageLineDeviceDriver = (LnshPackageLineDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshPackageLineDeviceDriver.getMode()); @@ -1224,8 +1209,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("barcode", lnshPackageLineDeviceDriver.getBarcode()); jo.put("isError", lnshPackageLineDeviceDriver.getIserror()); jo.put("message", lnshPackageLineDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshLaminatingMachineDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshLaminatingMachineDeviceDriver) { lnshLaminatingMachineDeviceDriver = (LnshLaminatingMachineDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshLaminatingMachineDeviceDriver.getMode()); @@ -1237,8 +1221,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("isOnline", lnshLaminatingMachineDeviceDriver.getIsonline()); jo.put("isError", lnshLaminatingMachineDeviceDriver.getIserror()); jo.put("message", lnshLaminatingMachineDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshRGVDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshRGVDeviceDriver) { lnshRGVDeviceDriver = (LnshRGVDeviceDriver) device.getDeviceDriver(); jo.put("device_code", device.getDevice_code()); jo.put("mode", lnshRGVDeviceDriver.getMode()); diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/rest/StageActorController.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/rest/StageActorController.java deleted file mode 100644 index cf4fa52..0000000 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/rest/StageActorController.java +++ /dev/null @@ -1,107 +0,0 @@ - -package org.nl.acs.stage.rest; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.acs.stage.service.StageActorService; -import org.nl.acs.stage.service.dto.StageActorDto; -import org.nl.annotation.Log; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.Map; - -/** - * @author ldjun - * @date 2021-04-12 - **/ -@RestController -@RequiredArgsConstructor -@Api(tags = "舞台演员管理") -@RequestMapping("/api/stageActor") -@Slf4j -public class StageActorController { - - private final StageActorService stageActorService; - - @GetMapping - @Log("查询舞台演员") - @ApiOperation("查询舞台演员") - //@PreAuthorize("@el.check('stageActor:list')") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(stageActorService.queryAll(whereJson, page), HttpStatus.OK); - } - - @PostMapping - @Log("新增舞台演员") - @ApiOperation("新增舞台演员") - //@PreAuthorize("@el.check('stageActor:add')") - public ResponseEntity create(@Validated @RequestBody StageActorDto dto) { - stageActorService.create(dto); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PutMapping - @Log("修改舞台演员") - @ApiOperation("修改舞台演员") - //@PreAuthorize("@el.check('stageActor:edit')") - public ResponseEntity update(@Validated @RequestBody StageActorDto dto) { - stageActorService.update(dto); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("删除舞台演员") - @ApiOperation("删除舞台演员") - //@PreAuthorize("@el.check('stageActor:del')") - @DeleteMapping - public ResponseEntity delete(@RequestBody String[] ids) { - stageActorService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } - - @Log("导出舞台演员") - @ApiOperation("导出舞台演员") - @GetMapping(value = "/download") - //@PreAuthorize("@el.check('stageActor:list')") - public void download(HttpServletResponse response, Map whereJson) throws IOException { - stageActorService.download(stageActorService.queryAll(whereJson), response); - } - - @PostMapping("/saveData") - @Log("保存舞台演员") - @ApiOperation("修改舞台演员") - //@PreAuthorize("@el.check('stageActor:edit')") - public ResponseEntity saveData(@RequestBody Map map) throws IOException { - String stage_code = (String) map.get("stage_code"); - String grid_width = String.valueOf(map.get("grid_width")); - String grid_length = String.valueOf(map.get("grid_length")); - - JSONArray actors = JSONArray.parseArray((JSON.toJSONString(map.get("list")))); - JSONObject mstForm = new JSONObject(); - mstForm.put("stage_code", stage_code); - mstForm.put("grid_width", grid_width); - mstForm.put("grid_length", grid_length); - stageActorService.saveData(mstForm, actors); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @GetMapping("/queryStageActor/{stage_code}") - @Log("查询舞台演员") - @ApiOperation("查询舞台演员") - //@PreAuthorize("@el.check('stageActor:list')") - public ResponseEntity queryStageActor(@PathVariable String stage_code) throws Exception { - return new ResponseEntity<>(stageActorService.queryStageActorByStageCode(stage_code), HttpStatus.OK); - } - -} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/StageActorService.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/StageActorService.java deleted file mode 100644 index f4f9738..0000000 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/StageActorService.java +++ /dev/null @@ -1,103 +0,0 @@ - -package org.nl.acs.stage.service; - - - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import org.nl.acs.stage.service.dto.StageActorDto; -import org.springframework.data.domain.Pageable; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.List; -import java.util.Map; - -/** - * @author ldjun - * @description 服务接口 - * @date 2021-04-12 - **/ -public interface StageActorService { - - /** - * 查询数据分页 - * - * @param whereJson 条件 - * @param page 分页参数 - * @return Map - */ - Map queryAll(Map whereJson, Pageable page); - - /** - * 查询所有数据不分页 - * - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * - * @param actor_uuid ID - * @return StageActor - */ - StageActorDto findById(String actor_uuid); - - /** - * 根据编码查询 - * - * @param code code - * @return StageActor - */ - StageActorDto findByCode(String code); - - - /** - * 创建 - * - * @param dto / - */ - void create(StageActorDto dto); - - /** - * 编辑 - * - * @param dto / - */ - void update(StageActorDto dto); - - /** - * 多选删除 - * - * @param ids / - */ - void deleteAll(String[] ids); - - /** - * 导出数据 - * - * @param dtos 待导出的数据 - * @param response / - * @throws IOException / - */ - void download(List dtos, HttpServletResponse response) throws IOException; - - /** - * 舞台编辑时候保存数据 - * - * @param mstForm 舞台编码 - * @param array 舞台演员明细 - * @throws IOException - */ - void saveData(JSONObject mstForm, JSONArray array) throws IOException; - - /** - * 根据舞台编码查询舞台演员 - * - * @param stage_code 舞台编码 - * @return - */ - JSONObject queryStageActorByStageCode(String stage_code) throws Exception; -} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/dto/StageActorDto.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/dto/StageActorDto.java deleted file mode 100644 index 39902db..0000000 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/dto/StageActorDto.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.nl.acs.stage.service.dto; - -import lombok.Data; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * @author ldjun - * @description / - * @date 2021-04-12 - **/ -@Data -public class StageActorDto implements Serializable { - - /** - * 图标标识 - */ - private String actor_uuid; - - /** - * 设备编码 - */ - private String device_code; - - /** - * 图标名字 - */ - private String device_name; - - /** - * 图标名字 - */ - private String image_name; - - /** - * 图标名字 - */ - private String angle; - - /** - * 舞台标识 - */ - private String stage_uuid; - - /** - * 备注 - */ - private String remark; - - /** - * 是否启用 - */ - private String is_active; - - /** - * 是否删除 - */ - private String is_delete; - - /** - * 创建者 - */ - private String create_by; - - /** - * 创建时间 - */ - private String create_time; - - /** - * 修改者 - */ - private String update_by; - - /** - * 修改时间 - */ - private String update_time; - - /** - * 数组下标 - */ - private BigDecimal index_seq; -} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/impl/StageServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/impl/StageServiceImpl.java deleted file mode 100644 index 3651e94..0000000 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/impl/StageServiceImpl.java +++ /dev/null @@ -1,150 +0,0 @@ - -package org.nl.acs.stage.service.impl; - - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.acs.stage.service.StageService; -import org.nl.acs.stage.service.dto.StageDto; -import org.nl.exception.BadRequestException; -import org.nl.utils.FileUtil; -import org.nl.utils.SecurityUtils; -import org.nl.wql.core.bean.ResultBean; -import org.nl.wql.core.bean.WQLObject; -import org.nl.wql.util.WqlUtil; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * @author ldjun - * @description 服务实现 - * @date 2021-04-12 - **/ -@Service -@RequiredArgsConstructor -@Slf4j -public class StageServiceImpl implements StageService { - - @Override - public Map queryAll(Map whereJson, Pageable page) { - WQLObject wo = WQLObject.getWQLObject("acs_stage"); - ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "", "update_time desc"); - final JSONObject json = rb.pageResult(); - return json; - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("acs_stage"); - JSONArray arr = wo.query().getResultJSONArray(0); - List list = JSONObject.parseArray(arr.toJSONString(), StageDto.class); - return list; - } - - @Override - public StageDto findById(String stage_uuid) { - WQLObject wo = WQLObject.getWQLObject("acs_stage"); - JSONObject json = wo.query("stage_uuid ='" + stage_uuid + "'").uniqueResult(0); - final StageDto obj = json.toJavaObject(StageDto.class); - return obj; - } - - @Override - public StageDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("acs_stage"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - final StageDto obj = json.toJavaObject(StageDto.class); - return obj; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(StageDto dto) { - String currentUsername = SecurityUtils.getCurrentUsername(); - String now = DateUtil.now(); - - dto.setStage_uuid(IdUtil.simpleUUID()); - dto.setCreate_by(currentUsername); - dto.setUpdate_by(currentUsername); - dto.setUpdate_time(now); - dto.setCreate_time(now); - - WQLObject wo = WQLObject.getWQLObject("acs_stage"); - JSONObject json = (JSONObject) JSONObject.toJSON(dto); - - wo.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(StageDto dto) { - StageDto entity = this.findById(dto.getStage_uuid()); - if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); - - String currentUsername = SecurityUtils.getCurrentUsername(); - String now = DateUtil.now(); - dto.setUpdate_time(now); - dto.setUpdate_by(currentUsername); - - WQLObject wo = WQLObject.getWQLObject("acs_stage"); - JSONObject json = (JSONObject) JSONObject.toJSON(dto); - - wo.update(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(String[] ids) { - WQLObject wo = WQLObject.getWQLObject("acs_stage"); - for (String stage_uuid : ids) { - wo.delete("stage_uuid = '" + stage_uuid + "'"); - } - } - - @Override - public void download(List all, HttpServletResponse response) throws IOException { - List> list = new ArrayList<>(); - for (StageDto stage : all) { - Map map = new LinkedHashMap<>(); - map.put("舞台编码", stage.getStage_code()); - map.put("舞台名字", stage.getStage_name()); - map.put("备注", stage.getRemark()); - map.put("是否启用", stage.getIs_active()); - map.put("是否删除", stage.getIs_delete()); - map.put("创建者", stage.getCreate_by()); - map.put("创建时间", stage.getCreate_time()); - map.put("修改者", stage.getUpdate_by()); - map.put("修改时间", stage.getUpdate_time()); - list.add(map); - } - FileUtil.downloadExcel(list, response); - } - - @Override - public JSONArray selectList() { - //设备基础信息表【acs_stage】 - JSONArray arr = WQLObject.getWQLObject("acs_stage").query("is_delete= '0' AND is_active= '1'").getResultJSONArray(0); - JSONArray result = new JSONArray(); - for (int i = 0; i < arr.size(); i++) { - JSONObject obj = arr.getJSONObject(i); - JSONObject json = new JSONObject(); - json.put("stage_id", obj.getString("stage_id")); - json.put("stage_code", obj.getString("stage_code")); - json.put("stage_name", obj.getString("stage_name")); - result.add(json); - } - return result; - } -} diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/wql/QStage_01.wql b/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/wql/QStage_01.wql deleted file mode 100644 index e50cd16..0000000 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/wql/QStage_01.wql +++ /dev/null @@ -1,61 +0,0 @@ -[交易说明] - 交易名: 根据设备查询舞台编码 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - //设备编码 - 输入.device_code TYPEAS s_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - IF 输入.flag = "1" - QUERY - SELECT - stage_code - FROM - acs_stage - WHERE - stage_uuid IN ( - SELECT - stage_uuid - FROM - acs_stage_actor - WHERE - 1=1 - OPTION 输入.device_code <> "" - device_code = 输入.device_code - ENDOPTION - ) - ENDSELECT - ENDQUERY - ENDIF diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/rest/StageController.java b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/rest/StageController.java similarity index 62% rename from acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/rest/StageController.java rename to acs/hd/nladmin-system/src/main/java/org/nl/logicflow/rest/StageController.java index 14a227b..35fa296 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/rest/StageController.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/rest/StageController.java @@ -1,37 +1,34 @@ +package org.nl.logicflow.rest; -package org.nl.acs.stage.rest; - - +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.acs.stage.service.StageService; -import org.nl.acs.stage.service.dto.StageDto; import org.nl.annotation.Log; +import org.nl.logicflow.service.StageService; +import org.nl.logicflow.service.dto.StageDto; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import java.util.Map; /** - * @author ldjun - * @date 2021-04-12 - **/ + * @Author: lyd + * @Description: 舞台管理 + * @Date: 2022-08-15 + */ @RestController @RequiredArgsConstructor @Api(tags = "舞台管理") @RequestMapping("/api/stage") @Slf4j public class StageController { - private final StageService stageService; - @GetMapping @Log("查询舞台") @ApiOperation("查询舞台") @@ -67,14 +64,6 @@ public class StageController { return new ResponseEntity<>(HttpStatus.OK); } - @Log("导出舞台") - @ApiOperation("导出舞台") - @GetMapping(value = "/download") - //@PreAuthorize("@el.check('stage:list')") - public void download(HttpServletResponse response, Map whereJson) throws IOException { - stageService.download(stageService.queryAll(whereJson), response); - } - @GetMapping("/selectList") @Log("下拉选舞台") @ApiOperation("下拉选舞台") @@ -82,4 +71,29 @@ public class StageController { public ResponseEntity selectList() { return new ResponseEntity<>(stageService.selectList(), HttpStatus.OK); } + + @PostMapping("/addNewStage") + @Log("保存舞台数据") + @ApiOperation("保存舞台数据") + public ResponseEntity addNewStage(@Validated @RequestBody StageDto dto) { + log.info("dto{}",dto); + stageService.addNewStage(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PostMapping("/getNewStageDataByCode") + @Log("根据stage_code获取舞台数据") + @ApiOperation("根据stage_code获取舞台数据") + public ResponseEntity getNewStageDataByCode(@RequestBody String code) { + return new ResponseEntity<>(stageService.findByCode(code), HttpStatus.CREATED); + } + + @PostMapping("/getDeviceByCodes") + @Log("获取舞台设备信息") + @ApiOperation("获取舞台设备信息") + public ResponseEntity getDeviceByCodes(@RequestBody String json) throws Exception{ + JSONArray jsonArray = JSONArray.parseArray(json); + return new ResponseEntity<>(stageService.getDeviceByCodes(jsonArray),HttpStatus.OK); + } + } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/rest/StageImageController.java b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/rest/StageImageController.java similarity index 76% rename from acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/rest/StageImageController.java rename to acs/hd/nladmin-system/src/main/java/org/nl/logicflow/rest/StageImageController.java index 9c701ab..5d4e7a7 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/rest/StageImageController.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/rest/StageImageController.java @@ -1,35 +1,31 @@ - -package org.nl.acs.stage.rest; - +package org.nl.logicflow.rest; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.acs.stage.service.StageImageService; -import org.nl.acs.stage.service.dto.StageImageDto; import org.nl.annotation.Log; +import org.nl.logicflow.service.StageImageService; +import org.nl.logicflow.service.dto.StageImageDto; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import java.util.Map; /** - * @author zhouz - * @date 2021-04-06 - **/ + * @Author: lyd + * @Description: 舞台图标控制层 + * @Date: 2022-08-16 + */ @RestController @RequiredArgsConstructor @Api(tags = "舞台管理") @RequestMapping("/api/stageImage") @Slf4j public class StageImageController { - private final StageImageService stageImageService; @GetMapping @@ -67,11 +63,11 @@ public class StageImageController { return new ResponseEntity<>(HttpStatus.OK); } - @Log("导出舞台") - @ApiOperation("导出舞台") - @GetMapping(value = "/download") - //@PreAuthorize("@el.check('stageImage:list')") - public void download(HttpServletResponse response, Map whereJson) throws IOException { - stageImageService.download(stageImageService.queryAll(whereJson), response); + @GetMapping("/selectList") + @Log("下拉选设备图标") + @ApiOperation("下拉选设备图标") + //@PreAuthorize("@el.check('routePlan:list')") + public ResponseEntity selectList() { + return new ResponseEntity<>(stageImageService.selectList(), HttpStatus.OK); } } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/StageImageService.java b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/StageImageService.java similarity index 50% rename from acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/StageImageService.java rename to acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/StageImageService.java index fafd7ce..98d305d 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/StageImageService.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/StageImageService.java @@ -1,21 +1,17 @@ +package org.nl.logicflow.service; -package org.nl.acs.stage.service; - -import org.nl.acs.stage.service.dto.StageImageDto; +import com.alibaba.fastjson.JSONArray; +import org.nl.logicflow.service.dto.StageImageDto; import org.springframework.data.domain.Pageable; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.List; import java.util.Map; /** - * @author zhouz - * @description 服务接口 - * @date 2021-04-06 - **/ + * @Author: lyd + * @Description: 舞台图标的服务层 + * @Date: 2022-08-16 + */ public interface StageImageService { - /** * 查询数据分页 * @@ -25,31 +21,6 @@ public interface StageImageService { */ Map queryAll(Map whereJson, Pageable page); - /** - * 查询所有数据不分页 - * - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * - * @param image_uuid ID - * @return StageImage - */ - StageImageDto findById(String image_uuid); - - /** - * 根据编码查询 - * - * @param code code - * @return StageImage - */ - StageImageDto findByCode(String code); - - /** * 创建 * @@ -64,6 +35,14 @@ public interface StageImageService { */ void update(StageImageDto dto); + /** + * 根据ID查询 + * + * @param image_uuid ID + * @return StageImage + */ + StageImageDto findById(String image_uuid); + /** * 多选删除 * @@ -72,11 +51,9 @@ public interface StageImageService { void deleteAll(String[] ids); /** - * 导出数据 + * 前端舞台编辑选择设备图标下拉选列表 * - * @param dtos 待导出的数据 - * @param response / - * @throws IOException / + * @return */ - void download(List dtos, HttpServletResponse response) throws IOException; + JSONArray selectList(); } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/StageService.java b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/StageService.java similarity index 62% rename from acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/StageService.java rename to acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/StageService.java index 5e59ba0..a98138d 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/StageService.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/StageService.java @@ -1,23 +1,18 @@ - -package org.nl.acs.stage.service; - +package org.nl.logicflow.service; import com.alibaba.fastjson.JSONArray; -import org.nl.acs.stage.service.dto.StageDto; +import com.alibaba.fastjson.JSONObject; +import org.nl.logicflow.service.dto.StageDto; import org.springframework.data.domain.Pageable; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.List; import java.util.Map; /** - * @author ldjun - * @description 服务接口 - * @date 2021-04-12 - **/ + * @Author: lyd + * @Description: + * @Date: 2022-08-15 + */ public interface StageService { - /** * 查询数据分页 * @@ -27,31 +22,6 @@ public interface StageService { */ Map queryAll(Map whereJson, Pageable page); - /** - * 查询所有数据不分页 - * - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * - * @param stage_uuid ID - * @return Stage - */ - StageDto findById(String stage_uuid); - - /** - * 根据编码查询 - * - * @param code code - * @return Stage - */ - StageDto findByCode(String code); - - /** * 创建 * @@ -66,6 +36,14 @@ public interface StageService { */ void update(StageDto dto); + /** + * 根据ID查询 + * + * @param stage_uuid ID + * @return Stage + */ + StageDto findById(String stage_uuid); + /** * 多选删除 * @@ -73,20 +51,32 @@ public interface StageService { */ void deleteAll(String[] ids); - /** - * 导出数据 - * - * @param dtos 待导出的数据 - * @param response / - * @throws IOException / - */ - void download(List dtos, HttpServletResponse response) throws IOException; - - /** * 前端舞台下拉选列表 * * @return */ JSONArray selectList(); + + /** + * 新增舞台信息 + * 将数据保存到remark---保存数据 + * @param dto + */ + void addNewStage(StageDto dto); + + /** + * 根据编码查询 + * + * @param code code + * @return Stage + */ + StageDto findByCode(String code); + + /** + * 设备编号和组价id获取设备信息 + * @param jsonArray + * @return + */ + JSONArray getDeviceByCodes(JSONArray jsonArray) throws Exception; } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/dto/StageDto.java b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/dto/StageDto.java similarity index 81% rename from acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/dto/StageDto.java rename to acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/dto/StageDto.java index 97c1b45..5584699 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/dto/StageDto.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/dto/StageDto.java @@ -1,17 +1,16 @@ -package org.nl.acs.stage.service.dto; +package org.nl.logicflow.service.dto; import lombok.Data; import java.io.Serializable; /** - * @author ldjun - * @description / - * @date 2021-04-12 - **/ + * @Author: lyd + * @Description: 舞台数据的Dto + * @Date: 2022-08-15 + */ @Data public class StageDto implements Serializable { - /** * 舞台标识 */ @@ -28,9 +27,9 @@ public class StageDto implements Serializable { private String stage_name; /** - * 备注 + * 舞台数据 */ - private String remark; + private String stage_data; /** * 是否启用 diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/dto/StageImageDto.java b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/dto/StageImageDto.java similarity index 88% rename from acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/dto/StageImageDto.java rename to acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/dto/StageImageDto.java index 6be9df1..082765d 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/dto/StageImageDto.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/dto/StageImageDto.java @@ -1,17 +1,16 @@ -package org.nl.acs.stage.service.dto; +package org.nl.logicflow.service.dto; import lombok.Data; import java.io.Serializable; /** - * @author zhouz - * @description / - * @date 2021-04-06 - **/ + * @Author: lyd + * @Description: 设备图标dto + * @Date: 2022-08-16 + */ @Data public class StageImageDto implements Serializable { - /** * 设备标识 */ @@ -67,3 +66,4 @@ public class StageImageDto implements Serializable { */ private String image_code; } + diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/impl/StageImageServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/impl/StageImageServiceImpl.java similarity index 51% rename from acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/impl/StageImageServiceImpl.java rename to acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/impl/StageImageServiceImpl.java index 8a17436..7d2f100 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/impl/StageImageServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/impl/StageImageServiceImpl.java @@ -1,6 +1,4 @@ - -package org.nl.acs.stage.service.impl; - +package org.nl.logicflow.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; @@ -8,10 +6,9 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.acs.stage.service.StageImageService; -import org.nl.acs.stage.service.dto.StageImageDto; import org.nl.exception.BadRequestException; -import org.nl.utils.FileUtil; +import org.nl.logicflow.service.StageImageService; +import org.nl.logicflow.service.dto.StageImageDto; import org.nl.utils.SecurityUtils; import org.nl.wql.core.bean.ResultBean; import org.nl.wql.core.bean.WQLObject; @@ -20,59 +17,29 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; /** - * @author zhouz - * @description 服务实现 - * @date 2021-04-06 - **/ + * @Author: lyd + * @Description: 舞台图标的服务实现 + * @Date: 2022-08-16 + */ @Service @RequiredArgsConstructor @Slf4j public class StageImageServiceImpl implements StageImageService { - @Override public Map queryAll(Map whereJson, Pageable page) { String where = "1=1"; if (whereJson.get("device_type") != null) { where = "driver_code_json like ('%" + whereJson.get("device_type") + "%')"; } - WQLObject wo = WQLObject.getWQLObject("acs_stage_image"); + WQLObject wo = WQLObject.getWQLObject("stage_image"); ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), where, "update_time desc"); final JSONObject json = rb.pageResult(); return json; } - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("acs_stage_image"); - JSONArray arr = wo.query().getResultJSONArray(0); - List list = arr.toJavaList(StageImageDto.class); - return list; - } - - @Override - public StageImageDto findById(String image_uuid) { - WQLObject wo = WQLObject.getWQLObject("acs_stage_image"); - JSONObject json = wo.query("image_uuid ='" + image_uuid + "'").uniqueResult(0); - final StageImageDto obj = json.toJavaObject(StageImageDto.class); - return obj; - } - - @Override - public StageImageDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("acs_stage_image"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - final StageImageDto obj = json.toJavaObject(StageImageDto.class); - return obj; - } - @Override @Transactional(rollbackFor = Exception.class) public void create(StageImageDto dto) { @@ -85,8 +52,8 @@ public class StageImageServiceImpl implements StageImageService { dto.setUpdate_time(now); dto.setCreate_time(now); - WQLObject wo = WQLObject.getWQLObject("acs_stage_image"); - JSONObject json = (JSONObject) JSONObject.toJSON(dto); + WQLObject wo = WQLObject.getWQLObject("stage_image"); + JSONObject json = (JSONObject) JSONObject.toJSON(dto); wo.insert(json); } @@ -102,38 +69,43 @@ public class StageImageServiceImpl implements StageImageService { dto.setUpdate_time(now); dto.setUpdate_by(currentUsername); - WQLObject wo = WQLObject.getWQLObject("acs_stage_image"); - JSONObject json = (JSONObject) JSONObject.toJSON(dto); + WQLObject wo = WQLObject.getWQLObject("stage_image"); + JSONObject json = (JSONObject) JSONObject.toJSON(dto); wo.update(json); } + @Override + public StageImageDto findById(String image_uuid) { + WQLObject wo = WQLObject.getWQLObject("stage_image"); + JSONObject json = wo.query("image_uuid ='" + image_uuid + "'").uniqueResult(0); + final StageImageDto obj = json.toJavaObject(StageImageDto.class); + return obj; + } + @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(String[] ids) { - WQLObject wo = WQLObject.getWQLObject("acs_stage_image"); + WQLObject wo = WQLObject.getWQLObject("stage_image"); for (String image_uuid : ids) { wo.delete("image_uuid = '" + image_uuid + "'"); } } @Override - public void download(List all, HttpServletResponse response) throws IOException { - List> list = new ArrayList<>(); - for (StageImageDto stageImage : all) { - Map map = new LinkedHashMap<>(); - map.put("设备名字", stageImage.getImage_name()); - map.put("适用驱动", stageImage.getDriver_code_json()); - map.put("备注", stageImage.getRemark()); - map.put("是否启用", stageImage.getIs_active()); - map.put("是否删除", stageImage.getIs_delete()); - map.put("创建者", stageImage.getCreate_by()); - map.put("创建时间", stageImage.getCreate_time()); - map.put("修改者", stageImage.getUpdate_by()); - map.put("修改时间", stageImage.getUpdate_time()); - map.put("图标编码", stageImage.getImage_code()); - list.add(map); + public JSONArray selectList() { + //设备基础信息表【acs_stage_image】 + JSONArray arr = WQLObject.getWQLObject("stage_image").query("is_delete= '0' AND is_active= '1'", "update_time desc").getResultJSONArray(0); + JSONArray result = new JSONArray(); + for (int i = 0; i < arr.size(); i++) { + JSONObject obj = arr.getJSONObject(i); + JSONObject json = new JSONObject(); + json.put("image_uuid", obj.getString("image_uuid")); + json.put("image_code", obj.getString("image_code")); + json.put("image_name", obj.getString("image_code").toString().split("-")[0]); + result.add(json); } - FileUtil.downloadExcel(list, response); + return result; } } + diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/impl/StageActorServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/impl/StageServiceImpl.java similarity index 74% rename from acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/impl/StageActorServiceImpl.java rename to acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/impl/StageServiceImpl.java index 4b79cd0..e239e45 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/stage/service/impl/StageActorServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/logicflow/service/impl/StageServiceImpl.java @@ -1,33 +1,21 @@ - -package org.nl.acs.stage.service.impl; - +package org.nl.logicflow.service.impl; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.device_driver.electric_fence.ElectricFenceDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_Laminating_machine.LnshLaminatingMachineDeviceDriver; -import org.nl.acs.device_driver.lnsh.lnsh_fold_disc_site.LnshFoldDiscSiteDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_kiln_lane.LnshKilnLaneDeviceDriver; -import org.nl.acs.device_driver.lnsh.lnsh_kiln_truss.LnshKilnTrussDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_labeling_machine.LnshLabelingMachineDeviceDriver; -import org.nl.acs.device_driver.lnsh.lnsh_mixing_mill.LnshMixingMillDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_one_rgv.LnshOneRGVDeviceDriver; -import org.nl.acs.device_driver.lnsh.lnsh_out_kiln_truss.LnshOutKilnTrussDeviceDriver; -import org.nl.acs.device_driver.lnsh.lnsh_package_line.LnshPackageLineDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_package_pallet_manipulator.LnshPackagePalletManipulatorDeviceDriver; -import org.nl.acs.device_driver.lnsh.lnsh_package_site.LnshPackageSiteDeviceDriver; -import org.nl.acs.device_driver.lnsh.lnsh_pallet_storage.LnshPalletStorageDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_palletizing_manipulator.LnshPalletizingManipulatorDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_palletizing_manipulator_site.LnshPalletizingManipulatorSiteDeviceDriver; -import org.nl.acs.device_driver.lnsh.lnsh_press.LnshPressDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_rgv.LnshRGVDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_split_manipulator.LnshSplitManipulatorDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_station.LnshStationDeviceDriver; @@ -53,11 +41,9 @@ import org.nl.acs.device_driver.weighing_site.WeighingSiteDeviceDriver; import org.nl.acs.opc.Device; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; -import org.nl.acs.stage.service.StageActorService; -import org.nl.acs.stage.service.dto.StageActorDto; import org.nl.exception.BadRequestException; -import org.nl.utils.FileUtil; -import org.nl.utils.RedisUtils; +import org.nl.logicflow.service.StageService; +import org.nl.logicflow.service.dto.StageDto; import org.nl.utils.SecurityUtils; import org.nl.utils.SpringContextHolder; import org.nl.wql.core.bean.ResultBean; @@ -67,70 +53,38 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.net.BindException; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; /** - * @author ldjun - * @description 服务实现 - * @date 2021-04-12 - **/ + * @Author: lyd + * @Description: 舞台编辑实现类 + * @Date: 2022-08-15 + */ @Service @RequiredArgsConstructor @Slf4j -public class StageActorServiceImpl implements StageActorService { - private final RedisUtils redisUtils; - +public class StageServiceImpl implements StageService { @Override public Map queryAll(Map whereJson, Pageable page) { - WQLObject wo = WQLObject.getWQLObject("acs_stage_actor"); + WQLObject wo = WQLObject.getWQLObject("stage"); ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "", "update_time desc"); final JSONObject json = rb.pageResult(); return json; } - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("acs_stage_actor"); - JSONArray arr = wo.query().getResultJSONArray(0); - List list = arr.toJavaList(StageActorDto.class); - return list; - } - - @Override - public StageActorDto findById(String actor_uuid) { - WQLObject wo = WQLObject.getWQLObject("acs_stage_actor"); - JSONObject json = wo.query("actor_uuid ='" + actor_uuid + "'").uniqueResult(0); - final StageActorDto obj = json.toJavaObject(StageActorDto.class); - return obj; - } - - @Override - public StageActorDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("acs_stage_actor"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - final StageActorDto obj = json.toJavaObject(StageActorDto.class); - return obj; - } - @Override @Transactional(rollbackFor = Exception.class) - public void create(StageActorDto dto) { + public void create(StageDto dto) { String currentUsername = SecurityUtils.getCurrentUsername(); String now = DateUtil.now(); - dto.setActor_uuid(IdUtil.simpleUUID()); + dto.setStage_uuid(IdUtil.simpleUUID()); dto.setCreate_by(currentUsername); dto.setUpdate_by(currentUsername); dto.setUpdate_time(now); dto.setCreate_time(now); - WQLObject wo = WQLObject.getWQLObject("acs_stage_actor"); + WQLObject wo = WQLObject.getWQLObject("stage"); JSONObject json = (JSONObject) JSONObject.toJSON(dto); wo.insert(json); @@ -138,8 +92,8 @@ public class StageActorServiceImpl implements StageActorService { @Override @Transactional(rollbackFor = Exception.class) - public void update(StageActorDto dto) { - StageActorDto entity = this.findById(dto.getActor_uuid()); + public void update(StageDto dto) { + StageDto entity = this.findById(dto.getStage_uuid()); if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); String currentUsername = SecurityUtils.getCurrentUsername(); @@ -147,165 +101,111 @@ public class StageActorServiceImpl implements StageActorService { dto.setUpdate_time(now); dto.setUpdate_by(currentUsername); - WQLObject wo = WQLObject.getWQLObject("acs_stage_actor"); + WQLObject wo = WQLObject.getWQLObject("stage"); JSONObject json = (JSONObject) JSONObject.toJSON(dto); wo.update(json); } + @Override + public StageDto findById(String stage_uuid) { + WQLObject wo = WQLObject.getWQLObject("stage"); + JSONObject json = wo.query("stage_uuid ='" + stage_uuid + "'").uniqueResult(0); + final StageDto obj = json.toJavaObject(StageDto.class); + return obj; + } + @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(String[] ids) { - WQLObject wo = WQLObject.getWQLObject("acs_stage_actor"); - for (String actor_uuid : ids) { - wo.delete("actor_uuid = '" + actor_uuid + "'"); + WQLObject wo = WQLObject.getWQLObject("stage"); + for (String stage_uuid : ids) { + wo.delete("stage_uuid = '" + stage_uuid + "'"); } } @Override - public void download(List all, HttpServletResponse response) throws IOException { - List> list = new ArrayList<>(); - for (StageActorDto stageActor : all) { - Map map = new LinkedHashMap<>(); - map.put("设备编码", stageActor.getDevice_code()); - map.put("图标名字", stageActor.getDevice_name()); - map.put("图标名字", stageActor.getImage_name()); - map.put("图标名字", stageActor.getAngle()); - map.put("舞台标识", stageActor.getStage_uuid()); - map.put("备注", stageActor.getRemark()); - map.put("是否启用", stageActor.getIs_active()); - map.put("是否删除", stageActor.getIs_delete()); - map.put("创建者", stageActor.getCreate_by()); - map.put("创建时间", stageActor.getCreate_time()); - map.put("修改者", stageActor.getUpdate_by()); - map.put("修改时间", stageActor.getUpdate_time()); - list.add(map); + public JSONArray selectList() { + //设备基础信息表【stage】 + JSONArray arr = WQLObject.getWQLObject("stage").query("is_delete= '0' AND is_active= '1'").getResultJSONArray(0); + JSONArray result = new JSONArray(); + for (int i = 0; i < arr.size(); i++) { + JSONObject obj = arr.getJSONObject(i); + JSONObject json = new JSONObject(); + json.put("stage_id", obj.getString("stage_id")); + json.put("stage_code", obj.getString("stage_code")); + json.put("stage_name", obj.getString("stage_name")); + result.add(json); } - FileUtil.downloadExcel(list, response); + return result; } @Override - public void saveData(JSONObject mstForm, JSONArray array) throws IOException { - String stage_code = mstForm.getString("stage_code"); - String grid_width = mstForm.getString("grid_width"); - String grid_length = mstForm.getString("grid_length"); - //舞台主表【acs_stage】 - WQLObject stageTab = WQLObject.getWQLObject("acs_stage"); - JSONObject stageObj = stageTab.query("is_delete ='0' and stage_code = '" + stage_code + "'").uniqueResult(0); - if (ObjectUtil.isNull(stageObj)) { - throw new BindException("舞台为找到,操作失败!"); - } - stageObj.put("grid_width", grid_width); - stageObj.put("grid_length", grid_length); - stageTab.update(stageObj); - //舞台实时监控表【acs_stage_actor】 - WQLObject actorTab = WQLObject.getWQLObject("acs_stage_actor"); - - String stage_uuid = stageObj.getString("stage_uuid"); - actorTab.delete("stage_uuid = '" + stage_uuid + "'"); - JSONArray actors = new JSONArray(); - for (int i = 0; i < array.size(); i++) { - JSONObject json = array.getJSONObject(i); - JSONObject param = new JSONObject(); - param.put("actor_uuid", IdUtil.simpleUUID()); - param.put("device_code", json.getString("device_code")); - param.put("device_name", json.getString("name")); - param.put("image_name", json.getString("img2")); - param.put("index_seq", json.getString("index")); - param.put("angle", json.getString("angle")); - param.put("stage_uuid", stage_uuid); - actors.add(param); - - String currentUsername = SecurityUtils.getCurrentUsername(); - String now = DateUtil.now(); - param.put("create_by", currentUsername); - param.put("create_time", now); - param.put("update_by", currentUsername); - param.put("update_time", now); - - - actorTab.insert(param); - } - - redisUtils.del("stage:mst:" + stage_code); - redisUtils.del("stage:dtl:" + stage_code); - redisUtils.set("stage:mst:" + stage_code, stageObj.toString()); - redisUtils.set("stage:dtl:" + stage_code, actors.toString()); + public void addNewStage(StageDto dto) { + // 根据dto的code找到数据 + StageDto stageDto = this.findByCode(dto.getStage_code()); + // 设置内容 + stageDto.setStage_data(dto.getStage_data()); + // 获取当前用户与时间 + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + stageDto.setUpdate_time(now); + stageDto.setUpdate_by(currentUsername); + WQLObject wo = WQLObject.getWQLObject("stage"); + JSONObject json = (JSONObject) JSONObject.toJSON(stageDto); + wo.update(json); } @Override - public JSONObject queryStageActorByStageCode(String stage_code) throws Exception { - //舞台主表【acs_stage】 - WQLObject stageTab = WQLObject.getWQLObject("acs_stage"); + public StageDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("stage"); + JSONObject json = wo.query("stage_code ='" + code + "'").uniqueResult(0); + final StageDto obj = json.toJavaObject(StageDto.class); + return obj; + } - JSONObject stageObj; - //先从缓存查找 - stageObj = JSON.parseObject(redisUtils.get("stage:mst:" + stage_code).toString()); - //缓存没找到去数据库查找 - if (MapUtil.isEmpty(stageObj)) { - stageObj = stageTab.query("is_delete ='0' and stage_code = '" + stage_code + "'").uniqueResult(0); - } - - if (MapUtil.isEmpty(stageObj)) { - throw new BindException("舞台为找到,操作失败!"); - } - //舞台实时监控表【acs_stage_actor】 - WQLObject actorTab = WQLObject.getWQLObject("acs_stage_actor"); - - String stage_uuid = stageObj.getString("stage_uuid"); - - JSONArray arr = new JSONArray(); - JSONArray list = new JSONArray(); - - String dtl = (String) redisUtils.get("stage:dtl:" + stage_code); - if (StrUtil.isNotEmpty(dtl)) { - list = JSONArray.parseArray(dtl); - } - if (ObjectUtil.isNull(list) || list.size() < 1) { - list = actorTab.query("stage_uuid = '" + stage_uuid + "'", "index_seq").getResultJSONArray(0); - } + @Override + public JSONArray getDeviceByCodes(JSONArray jsonArray) throws Exception { // 前端传来设备编号和节点的id DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); - - for (int i = 0, j = list.size(); i < j; i++) { - JSONObject json = list.getJSONObject(i); + JSONArray arr = new JSONArray(); + for (int i=0; i 0) { - JSONObject jo = new JSONObject(); - Device device = appService.findDeviceByCode(device_code); - if (ObjectUtil.isNull(device)) { - continue; - } + JSONObject js = jsonArray.getJSONObject(i); + //作业状态 + String mode = ""; + //信号 + String move = ""; + //取放信号 + String action = ""; + //进出信号 + String io_action = ""; + //报警 + String error = ""; + //设备状态 + String status = ""; + //托盘数量 + String number = ""; + //异常或说明信息 + String message = ""; + //当前指令 + String instruction = ""; + //上次指令 + String last_instruction = ""; + //当前托盘号 + String pallet = ""; + //当前托盘号 + String last_pallet = ""; + boolean applySucess; + boolean requestSucess; + if (ObjectUtil.isNotEmpty(js.get("device_code"))) { // 查找有绑定了设备号的设备 + JSONObject jo = new JSONObject(); + Device device = appService.findDeviceByCode((String) js.get("device_code")); + if (!ObjectUtil.isNull(device)) { +// if (ObjectUtil.isNotEmpty(device.getDeviceDriver())) { +// IDriverService driverService = applicationContext.getBean(device.getDeviceDriverDefination().getDriverCode(), IDriverService.class); +// obj.put("device_name", device.getDevice_name()); +// jo = driverService.getDeviceInfo(device); +// } //无光电普通站点 StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver; //无光电特殊站点 @@ -344,22 +244,10 @@ public class StageActorServiceImpl implements StageActorService { StandardRGVDeviceDriver standardRGVDeviceDriver; //电子围栏 ElectricFenceDeviceDriver electricFenceDeviceDriver; - //晟华-混碾机 - LnshMixingMillDeviceDriver lnshMixingMillDeviceDriver; - //晟华-压力机 - LnshPressDeviceDriver lnshPressDeviceDriver; //嘉耐-码垛机械手 LnshPalletizingManipulatorDeviceDriver lnshPalletizingManipulatorDeviceDriver; //嘉耐-窑车道 LnshKilnLaneDeviceDriver lnshKilnLaneDeviceDriver; - //晟华-入出窑桁架 - LnshKilnTrussDeviceDriver lnshKilnTrussDeviceDriver; - //晟华-出窑桁架 - LnshOutKilnTrussDeviceDriver lnshOutKilnTrussDeviceDriver; - //晟华-叠盘工位 - LnshFoldDiscSiteDeviceDriver lnshFoldDiscSiteDeviceDriver; - //晟华-托盘存储线 - LnshPalletStorageDeviceDriver lnshPalletStorageDeviceDriver; //嘉耐-包装码垛机械手 LnshPackagePalletManipulatorDeviceDriver lnshPackagePalletManipulatorDeviceDriver; //晟华-贴标机 @@ -370,14 +258,10 @@ public class StageActorServiceImpl implements StageActorService { LnshRGVDeviceDriver lnshRGVDeviceDriver; //嘉耐单工位RGV LnshOneRGVDeviceDriver lnshOneRGVDeviceDriver; - //晟华-包装线 - LnshPackageLineDeviceDriver lnshPackageLineDeviceDriver; //嘉耐-工位(交互模板) LnshStationDeviceDriver lnshStationDeviceDriver; //嘉耐-缓存货架 LnshLaminatingMachineDeviceDriver lnshLaminatingMachineDeviceDriver; - //嘉耐-包装线工位 - LnshPackageSiteDeviceDriver lnshPackageSiteDeviceDriver; //嘉耐-包装码拆垛机械手 RljnPackagePalletSplitManipulatorDeviceDriver rljnPackagePalletSplitManipulatorDeviceDriver; //嘉耐-码垛机械手工位 @@ -1090,142 +974,7 @@ public class StageActorServiceImpl implements StageActorService { jo.put("Htrapezoidal", lnshPalletizingManipulatorSiteDeviceDriver.getHtrapezoidal()); jo.put("Wthickness", lnshPalletizingManipulatorSiteDeviceDriver.getWthickness()); jo.put("batch", lnshPalletizingManipulatorSiteDeviceDriver.getBatch()); - } else if (device.getDeviceDriver() instanceof LnshPackageSiteDeviceDriver) { - lnshPackageSiteDeviceDriver = (LnshPackageSiteDeviceDriver) device.getDeviceDriver(); - if (lnshPackageSiteDeviceDriver.getMode() == 0) { - mode = "未联机"; - } else if (lnshPackageSiteDeviceDriver.getMode() == 1) { - mode = "单机"; - } else if (lnshPackageSiteDeviceDriver.getMode() == 2) { - mode = "联机"; - } else if (lnshPackageSiteDeviceDriver.getMode() == 4) { - mode = "叫料"; - } else if (lnshPackageSiteDeviceDriver.getMode() == 5) { - mode = "申请空盘"; - } else if (lnshPackageSiteDeviceDriver.getMode() == 6) { - mode = "申请入库"; - } - - if (lnshPackageSiteDeviceDriver.getAction() == 0) { - action = "禁止取放"; - } else if (lnshPackageSiteDeviceDriver.getAction() == 1) { - action = "允许取货"; - } else if (lnshPackageSiteDeviceDriver.getAction() == 2) { - action = "允许放货"; - } else if (lnshPackageSiteDeviceDriver.getAction() == 3) { - action = "允许取放"; - } - if (lnshPackageSiteDeviceDriver.getIo_action() == 0) { - io_action = "禁止进出"; - } else if (lnshPackageSiteDeviceDriver.getIo_action() == 1) { - io_action = "允许进入"; - } else if (lnshPackageSiteDeviceDriver.getIo_action() == 2) { - io_action = "允许离开"; - } else if (lnshPackageSiteDeviceDriver.getIo_action() == 3) { - io_action = "允许进出"; - } - - if (lnshPackageSiteDeviceDriver.getMove() == 0) { - move = "无货"; - } else if (lnshPackageSiteDeviceDriver.getMove() == 1) { - move = "有货"; - } else if (lnshPackageSiteDeviceDriver.getMove() == 2) { - move = "有托盘有货"; - } - obj.put("device_name", lnshPackageSiteDeviceDriver.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("move", move); - jo.put("action", action); - jo.put("io_action", io_action); - jo.put("hasGoods", lnshPackageSiteDeviceDriver.getHasGoods()); - jo.put("isOnline", lnshPackageSiteDeviceDriver.getIsonline()); - jo.put("error", lnshPackageSiteDeviceDriver.getError()); - jo.put("isError", lnshPackageSiteDeviceDriver.getIserror()); - jo.put("message", lnshPackageSiteDeviceDriver.getMessage()); - jo.put("task", lnshPackageSiteDeviceDriver.getTask()); - jo.put("weight", lnshPackageSiteDeviceDriver.getWeight()); - jo.put("material", lnshPackageSiteDeviceDriver.getMaterial()); - jo.put("barcode", lnshPackageSiteDeviceDriver.getBarcode()); - } - else if (device.getDeviceDriver() instanceof LnshMixingMillDeviceDriver) { - lnshMixingMillDeviceDriver = (LnshMixingMillDeviceDriver) device.getDeviceDriver(); - if (lnshMixingMillDeviceDriver.getMode() == 0) { - mode = "未联机"; - } else if (lnshMixingMillDeviceDriver.getMode() == 1) { - mode = "单机"; - } else if (lnshMixingMillDeviceDriver.getMode() == 2) { - mode = "联机"; - } else if (lnshMixingMillDeviceDriver.getMode() == 3) { - mode = "人工排产确认"; - } else if (lnshMixingMillDeviceDriver.getMode() == 4) { - mode = "工单完成"; - } - - if (lnshMixingMillDeviceDriver.getStatus() == 1) { - status = "待机"; - } else if (lnshMixingMillDeviceDriver.getStatus() == 2) { - status = "生产中"; - } else if (lnshMixingMillDeviceDriver.getStatus() == 3) { - status = "故障"; - } - - obj.put("device_name", lnshMixingMillDeviceDriver.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("status", status); - jo.put("isOnline", lnshMixingMillDeviceDriver.getIsonline()); - jo.put("error", lnshMixingMillDeviceDriver.getError()); - jo.put("open_time", lnshMixingMillDeviceDriver.getOpen_time()); - jo.put("standby_time", lnshMixingMillDeviceDriver.getStandby_time()); - jo.put("production_time", lnshMixingMillDeviceDriver.getProduction_time()); - jo.put("error_time", lnshMixingMillDeviceDriver.getError_time()); - jo.put("isError", lnshMixingMillDeviceDriver.getIserror()); - jo.put("message", lnshMixingMillDeviceDriver.getMessage()); - jo.put("weight", lnshMixingMillDeviceDriver.getWeight()); - jo.put("material", lnshMixingMillDeviceDriver.getMaterial()); - jo.put("order_No", lnshMixingMillDeviceDriver.getOrder_No()); - jo.put("mix_num", lnshMixingMillDeviceDriver.getMix_num()); - } - else if (device.getDeviceDriver() instanceof LnshPressDeviceDriver ) { - lnshPressDeviceDriver = (LnshPressDeviceDriver ) device.getDeviceDriver(); - if (lnshPressDeviceDriver.getMode() == 0) { - mode = "未联机"; - } else if (lnshPressDeviceDriver.getMode() == 1) { - mode = "单机"; - } else if (lnshPressDeviceDriver.getMode() == 2) { - mode = "联机"; - } else if (lnshPressDeviceDriver.getMode() == 3) { - mode = "人工排产确认"; - } else if (lnshPressDeviceDriver.getMode() == 4) { - mode = "工单完成"; - } - - if (lnshPressDeviceDriver.getStatus() == 1) { - status = "待机"; - } else if (lnshPressDeviceDriver.getStatus() == 2) { - status = "生产中"; - } else if (lnshPressDeviceDriver.getStatus() == 3) { - status = "故障"; - } - - obj.put("device_name", lnshPressDeviceDriver.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("status", status); - jo.put("isOnline", lnshPressDeviceDriver.getIsonline()); - jo.put("error", lnshPressDeviceDriver.getError()); - jo.put("open_time", lnshPressDeviceDriver.getOpen_time()); - jo.put("standby_time", lnshPressDeviceDriver.getStandby_time()); - jo.put("production_time", lnshPressDeviceDriver.getProduction_time()); - jo.put("error_time", lnshPressDeviceDriver.getError_time()); - jo.put("isError", lnshPressDeviceDriver.getIserror()); - jo.put("message", lnshPressDeviceDriver.getMessage()); - jo.put("weight", lnshPressDeviceDriver.getWeight()); - jo.put("qty", lnshPressDeviceDriver.getQty()); - jo.put("material", lnshPressDeviceDriver.getMaterial()); - jo.put("qualified", lnshPressDeviceDriver.getQualified()); - jo.put("unqualified", lnshPressDeviceDriver.getUnqualified()); - jo.put("order_No", lnshPressDeviceDriver.getOrder_No()); - } - else if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { lnshPalletizingManipulatorDeviceDriver = (LnshPalletizingManipulatorDeviceDriver) device.getDeviceDriver(); if (lnshPalletizingManipulatorDeviceDriver.getMode() == 0) { mode = "未联机"; @@ -1276,40 +1025,7 @@ public class StageActorServiceImpl implements StageActorService { jo.put("batch", lnshPalletizingManipulatorDeviceDriver.getBatch()); jo.put("isError", lnshPalletizingManipulatorDeviceDriver.getIserror()); jo.put("message", lnshPalletizingManipulatorDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshKilnTrussDeviceDriver) { - lnshKilnTrussDeviceDriver = (LnshKilnTrussDeviceDriver) device.getDeviceDriver(); - if (lnshKilnTrussDeviceDriver.getMode() == 0) { - mode = "未联机"; - } else if (lnshKilnTrussDeviceDriver.getMode() == 1) { - mode = "单机"; - } else if (lnshKilnTrussDeviceDriver.getMode() == 2) { - mode = "联机"; - } else if (lnshKilnTrussDeviceDriver.getMode() == 3) { - mode = "运行中"; - } - - if (lnshKilnTrussDeviceDriver.getStatus() == 1) { - status = "待机"; - } else if (lnshKilnTrussDeviceDriver.getStatus() == 2) { - status = "生产中"; - } else if (lnshKilnTrussDeviceDriver.getStatus() == 3) { - status = "故障"; - } - - obj.put("device_name", lnshKilnTrussDeviceDriver.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("status", status); - jo.put("isOnline", lnshKilnTrussDeviceDriver.getIsonline()); - jo.put("error", lnshKilnTrussDeviceDriver.getError()); - jo.put("open_time", lnshKilnTrussDeviceDriver.getOpen_time()); - jo.put("standby_time", lnshKilnTrussDeviceDriver.getStandby_time()); - jo.put("production_time", lnshKilnTrussDeviceDriver.getProduction_time()); - jo.put("error_time", lnshKilnTrussDeviceDriver.getError_time()); - jo.put("isError", lnshKilnTrussDeviceDriver.getIserror()); - jo.put("message", lnshKilnTrussDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshKilnLaneDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshKilnLaneDeviceDriver) { lnshKilnLaneDeviceDriver = (LnshKilnLaneDeviceDriver) device.getDeviceDriver(); if (lnshKilnLaneDeviceDriver.getMode() == 0) { mode = "未联机"; @@ -1341,112 +1057,7 @@ public class StageActorServiceImpl implements StageActorService { jo.put("nullCar_qty", lnshKilnLaneDeviceDriver.getNullCar_qty()); jo.put("burning_car_qty", lnshKilnLaneDeviceDriver.getBurning_car_qty()); jo.put("message", lnshKilnLaneDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshOutKilnTrussDeviceDriver) { - lnshOutKilnTrussDeviceDriver = (LnshOutKilnTrussDeviceDriver) device.getDeviceDriver(); - if (lnshOutKilnTrussDeviceDriver.getMode() == 0) { - mode = "未联机"; - } else if (lnshOutKilnTrussDeviceDriver.getMode() == 1) { - mode = "单机"; - } else if (lnshOutKilnTrussDeviceDriver.getMode() == 2) { - mode = "联机"; - } else if (lnshOutKilnTrussDeviceDriver.getMode() == 3) { - mode = "运行中"; - } - - if (lnshOutKilnTrussDeviceDriver.getStatus() == 1) { - status = "待机"; - } else if (lnshOutKilnTrussDeviceDriver.getStatus() == 2) { - status = "生产中"; - } else if (lnshOutKilnTrussDeviceDriver.getStatus() == 3) { - status = "故障"; - } - - obj.put("device_name", lnshOutKilnTrussDeviceDriver.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("status", status); - jo.put("isOnline", lnshOutKilnTrussDeviceDriver.getIsonline()); - jo.put("error", lnshOutKilnTrussDeviceDriver.getError()); - jo.put("outKiln_move", lnshOutKilnTrussDeviceDriver.getOutKiln_move()); - jo.put("outKiln_barcode", lnshOutKilnTrussDeviceDriver.getOutKiln_barcode()); - jo.put("outKiln_device", lnshOutKilnTrussDeviceDriver.getOutKiln_device()); - jo.put("open_time", lnshOutKilnTrussDeviceDriver.getOpen_time()); - jo.put("standby_time", lnshOutKilnTrussDeviceDriver.getStandby_time()); - jo.put("production_time", lnshOutKilnTrussDeviceDriver.getProduction_time()); - jo.put("error_time", lnshOutKilnTrussDeviceDriver.getError_time()); - jo.put("isError", lnshOutKilnTrussDeviceDriver.getIserror()); - jo.put("message", lnshOutKilnTrussDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshFoldDiscSiteDeviceDriver) { - lnshFoldDiscSiteDeviceDriver = (LnshFoldDiscSiteDeviceDriver) device.getDeviceDriver(); - if (lnshFoldDiscSiteDeviceDriver.getMode() == 0) { - mode = "未联机"; - } else if (lnshFoldDiscSiteDeviceDriver.getMode() == 1) { - mode = "单机"; - } else if (lnshFoldDiscSiteDeviceDriver.getMode() == 2) { - mode = "联机"; - } else if (lnshFoldDiscSiteDeviceDriver.getMode() == 3) { - mode = "运行中"; - } - - if (lnshFoldDiscSiteDeviceDriver.getStatus() == 1) { - status = "待机"; - } else if (lnshFoldDiscSiteDeviceDriver.getStatus() == 2) { - status = "生产中"; - } else if (lnshFoldDiscSiteDeviceDriver.getStatus() == 3) { - status = "故障"; - } - - obj.put("device_name", lnshFoldDiscSiteDeviceDriver.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("status", status); - jo.put("isOnline", lnshFoldDiscSiteDeviceDriver.getIsonline()); - jo.put("error", lnshFoldDiscSiteDeviceDriver.getError()); - jo.put("open_time", lnshFoldDiscSiteDeviceDriver.getOpen_time()); - jo.put("close_time", lnshFoldDiscSiteDeviceDriver.getClose_time()); - jo.put("standby_time", lnshFoldDiscSiteDeviceDriver.getStandby_time()); - jo.put("production_time", lnshFoldDiscSiteDeviceDriver.getProduction_time()); - jo.put("error_time", lnshFoldDiscSiteDeviceDriver.getError_time()); - jo.put("container_qty", lnshFoldDiscSiteDeviceDriver.getContainer_qty()); - jo.put("isError", lnshFoldDiscSiteDeviceDriver.getIserror()); - jo.put("message", lnshFoldDiscSiteDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshPalletStorageDeviceDriver) { - lnshPalletStorageDeviceDriver = (LnshPalletStorageDeviceDriver) device.getDeviceDriver(); - if (lnshPalletStorageDeviceDriver.getMode() == 0) { - mode = "未联机"; - } else if (lnshPalletStorageDeviceDriver.getMode() == 1) { - mode = "单机"; - } else if (lnshPalletStorageDeviceDriver.getMode() == 2) { - mode = "联机"; - } else if (lnshPalletStorageDeviceDriver.getMode() == 3) { - mode = "运行中"; - } - - if (lnshPalletStorageDeviceDriver.getStatus() == 1) { - status = "待机"; - } else if (lnshPalletStorageDeviceDriver.getStatus() == 2) { - status = "生产中"; - } else if (lnshPalletStorageDeviceDriver.getStatus() == 3) { - status = "故障"; - } - - obj.put("device_name", lnshPalletStorageDeviceDriver.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("status", status); - jo.put("isOnline", lnshPalletStorageDeviceDriver.getIsonline()); - jo.put("error", lnshPalletStorageDeviceDriver.getError()); - jo.put("open_time", lnshPalletStorageDeviceDriver.getOpen_time()); - jo.put("close_time", lnshPalletStorageDeviceDriver.getClose_time()); - jo.put("standby_time", lnshPalletStorageDeviceDriver.getStandby_time()); - jo.put("production_time", lnshPalletStorageDeviceDriver.getProduction_time()); - jo.put("error_time", lnshPalletStorageDeviceDriver.getError_time()); - jo.put("tray_crib_qty", lnshPalletStorageDeviceDriver.getTray_crib_qty()); - jo.put("total_container", lnshPalletStorageDeviceDriver.getTotal_container()); - jo.put("isError", lnshPalletStorageDeviceDriver.getIserror()); - jo.put("message", lnshPalletStorageDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshPackagePalletManipulatorDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshPackagePalletManipulatorDeviceDriver) { lnshPackagePalletManipulatorDeviceDriver = (LnshPackagePalletManipulatorDeviceDriver) device.getDeviceDriver(); if (lnshPackagePalletManipulatorDeviceDriver.getMode() == 0) { mode = "未联机"; @@ -1602,40 +1213,7 @@ public class StageActorServiceImpl implements StageActorService { jo.put("onoff_status", onoff_status); jo.put("isError", lnshSplitManipulatorDeviceDriver.getIserror()); jo.put("message", lnshSplitManipulatorDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshPackageLineDeviceDriver) { - lnshPackageLineDeviceDriver = (LnshPackageLineDeviceDriver) device.getDeviceDriver(); - if (lnshPackageLineDeviceDriver.getMode() == 0) { - mode = "未联机"; - } else if (lnshPackageLineDeviceDriver.getMode() == 1) { - mode = "单机"; - } else if (lnshPackageLineDeviceDriver.getMode() == 2) { - mode = "联机"; - } else if (lnshPackageLineDeviceDriver.getMode() == 3) { - mode = "运行中"; - } - - if (lnshPackageLineDeviceDriver.getStatus() == 1) { - status = "待机"; - } else if (lnshPackageLineDeviceDriver.getStatus() == 2) { - status = "生产中"; - } else if (lnshPackageLineDeviceDriver.getStatus() == 3) { - status = "故障"; - } - - obj.put("device_name", lnshPackageLineDeviceDriver.getDevice().getDevice_name()); - jo.put("mode", mode); - jo.put("status", status); - jo.put("isOnline", lnshPackageLineDeviceDriver.getIsonline()); - jo.put("open_time", lnshPackageLineDeviceDriver.getOpen_time()); - jo.put("standby_time", lnshPackageLineDeviceDriver.getStandby_time()); - jo.put("production_time", lnshPackageLineDeviceDriver.getProduction_time()); - jo.put("error_time", lnshPackageLineDeviceDriver.getError_time()); - jo.put("barcode", lnshPackageLineDeviceDriver.getBarcode()); - jo.put("isError", lnshPackageLineDeviceDriver.getIserror()); - jo.put("message", lnshPackageLineDeviceDriver.getMessage()); - } - else if (device.getDeviceDriver() instanceof LnshLaminatingMachineDeviceDriver) { + } else if (device.getDeviceDriver() instanceof LnshLaminatingMachineDeviceDriver) { lnshLaminatingMachineDeviceDriver = (LnshLaminatingMachineDeviceDriver) device.getDeviceDriver(); if (lnshLaminatingMachineDeviceDriver.getMode() == 0) { mode = "未联机"; @@ -1815,18 +1393,13 @@ public class StageActorServiceImpl implements StageActorService { jo.put("qty", lnshOneRGVDeviceDriver.getQty()); } obj.put("data", jo); + obj.put("device_code", js.get("device_code")); } } - - obj.put("img2", json.getString("image_name")); - obj.put("angle", json.getString("angle")); + obj.put("id", js.get("id")); // 设备不存在就只保留id,方便前端查看 arr.add(obj); } - - JSONObject result = new JSONObject(); - result.put("form", stageObj); - result.put("detail", arr); - - return result; + return arr; } + } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java index 6940ab4..a17cb99 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/modules/loki/service/impl/LokiServiceImpl.java @@ -60,7 +60,7 @@ public class LokiServiceImpl implements LokiService { JSONObject parse = null; String query = lokiUrl + "/query_range?query={" + logLabel + "=\"" + logLabelValue + "\"} |= `" + text + "`"; String result = ""; - if (start.equals(0L)) { + if (start==0L) { result = HttpUtil.get(query + "&limit=" + limit + "&direction=" + direction, CharsetUtil.CHARSET_UTF_8); } else { result = HttpUtil.get(query + "&limit=" + limit + "&start=" + start + "&end=" + end + "&direction=" + direction, CharsetUtil.CHARSET_UTF_8); diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/modules/quartz/task/DeviceStatusMonitor.java b/acs/hd/nladmin-system/src/main/java/org/nl/modules/quartz/task/DeviceStatusMonitor.java index 09b3c13..ef06ce5 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/modules/quartz/task/DeviceStatusMonitor.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/modules/quartz/task/DeviceStatusMonitor.java @@ -4,7 +4,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.acs.stage.service.StageActorService; +//import org.nl.acs.stage.service.StageActorService; import org.nl.modules.mnt.websocket.MsgType; import org.nl.modules.mnt.websocket.SocketMsg; import org.nl.modules.mnt.websocket.WebSocketServer; @@ -20,21 +20,21 @@ import java.io.IOException; @Component @RequiredArgsConstructor public class DeviceStatusMonitor { - @Autowired - StageActorService stageActorService; - private String stage_code = "SHDP"; - - public void run(String stageCode) throws Exception { - try { - if (StrUtil.isNotEmpty(stageCode)) { - stage_code = stageCode; - } - JSONObject json = stageActorService.queryStageActorByStageCode(stage_code); - SocketMsg deviceInfo = new SocketMsg(json, MsgType.INFO); - - WebSocketServer.sendInfo(deviceInfo, "device_monitor"); - } catch (IOException e) { - e.printStackTrace(); - } - } +// @Autowired +// StageActorService stageActorService; +// private String stage_code = "SHDP"; +// +// public void run(String stageCode) throws Exception { +// try { +// if (StrUtil.isNotEmpty(stageCode)) { +// stage_code = stageCode; +// } +// JSONObject json = stageActorService.queryStageActorByStageCode(stage_code); +// SocketMsg deviceInfo = new SocketMsg(json, MsgType.INFO); +// +// WebSocketServer.sendInfo(deviceInfo, "device_monitor"); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/modules/system/wql/sys.xls b/acs/hd/nladmin-system/src/main/java/org/nl/modules/system/wql/sys.xls index 14949eb730d18d007569db1245cff732e2b9f7fb..ff47be3e5e0b864838c1f0802aea448bde76ac12 100644 GIT binary patch delta 51575 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 delta 44086 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

2^VrLA~^H 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 - - - - - + + + + + + + - - - 1000 - - ${LOKI_URL} - - - - - ${log.pattern} - - true - - + + + + + + + + + + + + + + + + - - - - - + + + + + diff --git a/acs/hd/nladmin-system/src/main/resources/logback-spring.xml b/acs/hd/nladmin-system/src/main/resources/logback-spring.xml index 1327671..0583757 100644 --- a/acs/hd/nladmin-system/src/main/resources/logback-spring.xml +++ b/acs/hd/nladmin-system/src/main/resources/logback-spring.xml @@ -25,7 +25,7 @@ https://juejin.cn/post/6844903775631572999 - + diff --git a/acs/qd/package.json b/acs/qd/package.json index e509f00..ecbe336 100644 --- a/acs/qd/package.json +++ b/acs/qd/package.json @@ -33,6 +33,8 @@ "url": "https://github.com/elunez/eladmin/issues" }, "dependencies": { + "@logicflow/core": "^1.1.24", + "@logicflow/extension": "^1.1.24", "@riophae/vue-treeselect": "0.4.0", "af-table-column": "^1.0.3", "ansi_up": "^5.1.0", @@ -60,6 +62,7 @@ "screenfull": "4.2.0", "sortablejs": "1.8.4", "vue": "2.6.10", + "vue-color": "^2.8.1", "vue-count-to": "1.0.13", "vue-cropper": "0.4.9", "vue-echarts": "^5.0.0-beta.0", diff --git a/acs/qd/src/api/logicflow/stage.js b/acs/qd/src/api/logicflow/stage.js new file mode 100644 index 0000000..913980b --- /dev/null +++ b/acs/qd/src/api/logicflow/stage.js @@ -0,0 +1,66 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/stage', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/stage/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/stage', + method: 'put', + data + }) +} + +export function selectStageList() { + return request({ + url: 'api/stage/selectList', + method: 'get' + }) +} + +export function addNewStage(data) { // 保存舞台数据 + return request({ + url: 'api/stage/addNewStage', + method: 'post', + data + }) +} + +export function getNewStageDataByCode(code) { + return request({ + url: 'api/stage/getNewStageDataByCode', + method: 'post', + data: code + }) +} + +export function getDeviceByCodes(map) { // 获取舞台上设备信息 + return request({ + url: 'api/stage/getDeviceByCodes', + method: 'post', + data: map + }) +} + +export function getStageInfoByCode(device_code) { + return request({ + url: 'api/stage/getStageInfoByCode', + method: 'post', + data: device_code + }) +} + +export default { add, edit, del, selectStageList, addNewStage, getNewStageDataByCode, getDeviceByCodes, getStageInfoByCode } diff --git a/acs/qd/src/api/logicflow/stageImage.js b/acs/qd/src/api/logicflow/stageImage.js new file mode 100644 index 0000000..20b902d --- /dev/null +++ b/acs/qd/src/api/logicflow/stageImage.js @@ -0,0 +1,34 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/stageImage', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/stageImage/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/stageImage', + method: 'put', + data + }) +} + +export function selectStageIconList() { + return request({ + url: 'api/stageImage/selectList', + method: 'get' + }) +} + +export default { add, edit, del, selectStageIconList } diff --git a/acs/qd/src/api/system/param.js b/acs/qd/src/api/system/param.js index 0763489..07a8e5c 100644 --- a/acs/qd/src/api/system/param.js +++ b/acs/qd/src/api/system/param.js @@ -24,4 +24,12 @@ export function edit(data) { }) } -export default { add, edit, del } +export function getStageCodeByCode(code) { + return request({ + url: 'api/param/getStageCodeByCode', + method: 'post', + data: code + }) +} + +export default { add, edit, del, getStageCodeByCode } diff --git a/acs/qd/src/main.js b/acs/qd/src/main.js index ef22503..8a1ef47 100644 --- a/acs/qd/src/main.js +++ b/acs/qd/src/main.js @@ -5,10 +5,10 @@ import Cookies from 'js-cookie' import 'normalize.css/normalize.css' import Element from 'element-ui' -//列自适应宽度:https://github.com/legendJaden/AFTableColumn +// 列自适应宽度:https://github.com/legendJaden/AFTableColumn import AFTableColumn from 'af-table-column' -//可编辑grid插件 +// 可编辑grid插件 import 'xe-utils' import VXETable from 'vxe-table' import 'vxe-table/lib/style.css' @@ -22,7 +22,6 @@ import 'mavon-editor/dist/css/index.css' // 数据字典 import dict from './components/Dict' - import scroll from 'vue-seamless-scroll' Vue.use(scroll) @@ -48,11 +47,16 @@ import 'echarts-gl' import 'jquery' +// 全局引入LogicFlow +import LogicFlow from '@logicflow/core' +import { Menu } from '@logicflow/extension' +import '@logicflow/extension/lib/style/index.css' +LogicFlow.use(Menu) + Vue.use(AFTableColumn) Vue.use(VXETable) Vue.prototype.$XModal = VXETable.modal - Vue.use(VueHighlightJS) Vue.use(mavonEditor) Vue.use(permission) diff --git a/acs/qd/src/views/monitor/logback/index.vue b/acs/qd/src/views/monitor/logback/index.vue index e540bc2..5d7e42c 100644 --- a/acs/qd/src/views/monitor/logback/index.vue +++ b/acs/qd/src/views/monitor/logback/index.vue @@ -4,7 +4,7 @@ - + - +

-
+
@@ -264,6 +265,7 @@ export default { }) }, getValues() { + this.logLabelValue = null logOperation.getAllValues(this.logLabel).then(res => { this.labelValueOptions = res.data }) @@ -329,7 +331,7 @@ export default { direction: 'backward' } }, - handleScroll(e) { + handleScroll() { const scrollTop = document.documentElement.scrollTop// 滚动高度 const clientHeight = document.documentElement.clientHeight// 可视高度 const scrollHeight = document.documentElement.scrollHeight// 内容高度 diff --git a/acs/qd/src/views/system/logicflow/editor/components/Diagram.vue b/acs/qd/src/views/system/logicflow/editor/components/Diagram.vue new file mode 100644 index 0000000..bd860f8 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/Diagram.vue @@ -0,0 +1,594 @@ + + + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/DiagramSidebar.vue b/acs/qd/src/views/system/logicflow/editor/components/DiagramSidebar.vue new file mode 100644 index 0000000..75eb620 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/DiagramSidebar.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/DiagramToolbar.vue b/acs/qd/src/views/system/logicflow/editor/components/DiagramToolbar.vue new file mode 100644 index 0000000..ac24070 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/DiagramToolbar.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/PropertyPanel.vue b/acs/qd/src/views/system/logicflow/editor/components/PropertyPanel.vue new file mode 100644 index 0000000..b59e078 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/PropertyPanel.vue @@ -0,0 +1,375 @@ + + + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Actor.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Actor.vue new file mode 100644 index 0000000..dc3818d --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Actor.vue @@ -0,0 +1,38 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/AreaSelect.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/AreaSelect.vue new file mode 100644 index 0000000..edb8929 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/AreaSelect.vue @@ -0,0 +1,15 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Blod.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Blod.vue new file mode 100644 index 0000000..3444a37 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Blod.vue @@ -0,0 +1,15 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Circle.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Circle.vue new file mode 100644 index 0000000..b8355a4 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Circle.vue @@ -0,0 +1,31 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/ColorFill.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/ColorFill.vue new file mode 100644 index 0000000..1c12d2a --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/ColorFill.vue @@ -0,0 +1,15 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/ColorText.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/ColorText.vue new file mode 100644 index 0000000..8aa7da1 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/ColorText.vue @@ -0,0 +1,15 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Cross.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Cross.vue new file mode 100644 index 0000000..ba01527 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Cross.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Cylinde.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Cylinde.vue new file mode 100644 index 0000000..c32f508 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Cylinde.vue @@ -0,0 +1,27 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Diamond.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Diamond.vue new file mode 100644 index 0000000..ae6e48a --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Diamond.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Divide.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Divide.vue new file mode 100644 index 0000000..32bbd4f --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Divide.vue @@ -0,0 +1,37 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/DownArrow.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/DownArrow.vue new file mode 100644 index 0000000..01de6a0 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/DownArrow.vue @@ -0,0 +1,18 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Ellipse.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Ellipse.vue new file mode 100644 index 0000000..e006fee --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Ellipse.vue @@ -0,0 +1,21 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Font.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Font.vue new file mode 100644 index 0000000..e9a1bb2 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Font.vue @@ -0,0 +1,15 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Heptagon.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Heptagon.vue new file mode 100644 index 0000000..1f10cb2 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Heptagon.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Hexagon.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Hexagon.vue new file mode 100644 index 0000000..1a9c513 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Hexagon.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/HorizontalArrow.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/HorizontalArrow.vue new file mode 100644 index 0000000..640f85c --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/HorizontalArrow.vue @@ -0,0 +1,18 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/LeftArrow.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/LeftArrow.vue new file mode 100644 index 0000000..c62689e --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/LeftArrow.vue @@ -0,0 +1,18 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Line.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Line.vue new file mode 100644 index 0000000..d4b7141 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Line.vue @@ -0,0 +1,15 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Minus.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Minus.vue new file mode 100644 index 0000000..e8a5c19 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Minus.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Parallelogram.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Parallelogram.vue new file mode 100644 index 0000000..1929f72 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Parallelogram.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Pentagon.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Pentagon.vue new file mode 100644 index 0000000..1f41d42 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Pentagon.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Rect.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Rect.vue new file mode 100644 index 0000000..5a62bb4 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Rect.vue @@ -0,0 +1,31 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/RectRadius.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/RectRadius.vue new file mode 100644 index 0000000..ee233aa --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/RectRadius.vue @@ -0,0 +1,23 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/RightArrow.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/RightArrow.vue new file mode 100644 index 0000000..5099141 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/RightArrow.vue @@ -0,0 +1,18 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Septagon.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Septagon.vue new file mode 100644 index 0000000..af70242 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Septagon.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/StepBack.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/StepBack.vue new file mode 100644 index 0000000..254da46 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/StepBack.vue @@ -0,0 +1,16 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/StepFoward.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/StepFoward.vue new file mode 100644 index 0000000..cd96b6b --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/StepFoward.vue @@ -0,0 +1,16 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Table.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Table.vue new file mode 100644 index 0000000..50bdced --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Table.vue @@ -0,0 +1,158 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Text.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Text.vue new file mode 100644 index 0000000..c1af1cd --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Text.vue @@ -0,0 +1,46 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Times.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Times.vue new file mode 100644 index 0000000..cbe890c --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Times.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Trapezoid.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Trapezoid.vue new file mode 100644 index 0000000..5d23b92 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Trapezoid.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/Triangle.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/Triangle.vue new file mode 100644 index 0000000..e40db56 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/Triangle.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/UpArrow.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/UpArrow.vue new file mode 100644 index 0000000..2ce28d7 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/UpArrow.vue @@ -0,0 +1,19 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/VerticalArrow.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/VerticalArrow.vue new file mode 100644 index 0000000..360d21b --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/VerticalArrow.vue @@ -0,0 +1,18 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/ZoomIn.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/ZoomIn.vue new file mode 100644 index 0000000..a525716 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/ZoomIn.vue @@ -0,0 +1,16 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/icon/ZoomOut.vue b/acs/qd/src/views/system/logicflow/editor/components/icon/ZoomOut.vue new file mode 100644 index 0000000..c30a25f --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/icon/ZoomOut.vue @@ -0,0 +1,16 @@ + + + diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/arrow/DownArrowNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/DownArrowNode.js new file mode 100644 index 0000000..e32d3c9 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/DownArrowNode.js @@ -0,0 +1,49 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' + +// 下箭头 + +class DownArrowModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 50 + this.height = 80 + } +} +class DownArrowView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const ArrowWidth = 1 / 3 * width + const upY = y - 1 / 2 * height + const downY = y + 1 / 2 * height + const downY2 = y + 1 / 5 * height + const attrs = { + ...style, + x, + y, + width, + height, + points: [ + [x - 1 / 2 * ArrowWidth, downY2], + [x - 1 / 2 * width, downY2], + [x, downY], + [x + 1 / 2 * width, downY2], + [x + 1 / 2 * ArrowWidth, downY2], + [x + 1 / 2 * ArrowWidth, upY], + [x - 1 / 2 * ArrowWidth, upY] + ] + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ] + ) + } +} + +export default { + type: 'down-arrow', + view: DownArrowView, + model: DownArrowModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/arrow/HorizontalArrowNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/HorizontalArrowNode.js new file mode 100644 index 0000000..0a8bf80 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/HorizontalArrowNode.js @@ -0,0 +1,56 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' + +// 水平双箭头 + +class HorizontalArrowModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 40 + } +} + +class HorizontalArrowView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const ArrowHeight = 1 / 3 * height + const leftX = x - 1 / 2 * width + const leftX2 = x - 1 / 5 * width + const rightX = x + 1 / 2 * width + const rightX2 = x + 1 / 5 * width + const attrs = { + ...style, + x, + y, + width, + height, + points: [ + // 右箭头 + [rightX2, y - 1 / 2 * ArrowHeight], + [rightX2, y - 1 / 2 * height], + [rightX, y], + [rightX2, y + 1 / 2 * height], + [rightX2, y + 1 / 2 * ArrowHeight], + // 左箭头 + [leftX2, y + 1 / 2 * ArrowHeight], + [leftX2, y + 1 / 2 * height], + [leftX, y], + [leftX2, y - 1 / 2 * height], + [leftX2, y - 1 / 2 * ArrowHeight] + ] + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ] + ) + } +} + +export default { + type: 'horizontal-arrow', + view: HorizontalArrowView, + model: HorizontalArrowModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/arrow/LeftArrow.js b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/LeftArrow.js new file mode 100644 index 0000000..0405e10 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/LeftArrow.js @@ -0,0 +1,48 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' + +// 左箭头 +class LeftArrowModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 50 + } +} +class LeftArrowView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const ArrowHeight = 1 / 3 * height + const leftX = x - 1 / 2 * width + const leftX2 = x - 1 / 5 * width + const rightX = x + 1 / 2 * width + const attrs = { + ...style, + x, + y, + width, + height, + points: [ + [leftX2, y - 1 / 2 * ArrowHeight], + [leftX2, y - 1 / 2 * height], + [leftX, y], + [leftX2, y + 1 / 2 * height], + [leftX2, y + 1 / 2 * ArrowHeight], + [rightX, y + 1 / 2 * ArrowHeight], + [rightX, y - 1 / 2 * ArrowHeight] + ] + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ] + ) + } +} + +export default { + type: 'left-arrow', + view: LeftArrowView, + model: LeftArrowModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/arrow/RightArrow.js b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/RightArrow.js new file mode 100644 index 0000000..f963d0e --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/RightArrow.js @@ -0,0 +1,50 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' + +// 右箭头 + +class RightArrowModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 50 + } +} + +class RightArrowView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const ArrowHeight = 1 / 3 * height + const leftX = x - 1 / 2 * width + const rightX = x + 1 / 2 * width + const rightX2 = x + 1 / 5 * width + const attrs = { + ...style, + x, + y, + width, + height, + points: [ + [rightX2, y - 1 / 2 * ArrowHeight], + [rightX2, y - 1 / 2 * height], + [rightX, y], + [rightX2, y + 1 / 2 * height], + [rightX2, y + 1 / 2 * ArrowHeight], + [leftX, y + 1 / 2 * ArrowHeight], + [leftX, y - 1 / 2 * ArrowHeight] + ] + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ] + ) + } +} + +export default { + type: 'right-arrow', + view: RightArrowView, + model: RightArrowModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/arrow/UpArrowNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/UpArrowNode.js new file mode 100644 index 0000000..ae9b538 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/UpArrowNode.js @@ -0,0 +1,49 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' + +// 上箭头 +class UpArrowModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 50 + this.height = 80 + } +} + +class UpArrowView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const ArrowWidth = 1 / 3 * width + const upY = y - 1 / 2 * height + const upY2 = y - 1 / 5 * height + const downY = y + 1 / 2 * height + const attrs = { + ...style, + x, + y, + width, + height, + points: [ + [x - 1 / 2 * ArrowWidth, upY2], + [x - 1 / 2 * width, upY2], + [x, upY], + [x + 1 / 2 * width, upY2], + [x + 1 / 2 * ArrowWidth, upY2], + [x + 1 / 2 * ArrowWidth, downY], + [x - 1 / 2 * ArrowWidth, downY] + ] + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ] + ) + } +} + +export default { + type: 'up-arrow', + view: UpArrowView, + model: UpArrowModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/arrow/VerticalArrowNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/VerticalArrowNode.js new file mode 100644 index 0000000..0a0fa26 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/arrow/VerticalArrowNode.js @@ -0,0 +1,56 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' + +// 竖直箭头 + +class VerticalArrowModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 40 + this.height = 80 + } +} + +class VerticalArrowView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const ArrowWidth = 1 / 3 * width + const upY = y - 1 / 2 * height + const upY2 = y - 1 / 5 * height + const downY = y + 1 / 2 * height + const downY2 = y + 1 / 5 * height + const attrs = { + ...style, + x, + y, + width, + height, + points: [ + // 上箭头 + [x - 1 / 2 * ArrowWidth, upY2], + [x - 1 / 2 * width, upY2], + [x, upY], + [x + 1 / 2 * width, upY2], + [x + 1 / 2 * ArrowWidth, upY2], + // 下箭头 + [x + 1 / 2 * ArrowWidth, downY2], + [x + 1 / 2 * width, downY2], + [x, downY], + [x - 1 / 2 * width, downY2], + [x - 1 / 2 * ArrowWidth, downY2] + ] + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ] + ) + } +} + +export default { + type: 'vertical-arrow', + view: VerticalArrowView, + model: VerticalArrowModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/basic/BaseNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/basic/BaseNode.js new file mode 100644 index 0000000..6c297ce --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/basic/BaseNode.js @@ -0,0 +1,16 @@ +import { BaseNode, BaseNodeModel } from '@logicflow/core' + +class BaseNewNode extends BaseNode { +} + +class BaseNewModel extends BaseNodeModel { + setAttributes() { + this.fill = 'red' + } +} + +export default { + type: 'BaseNode', + view: BaseNewNode, + model: BaseNewModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/basic/CircleNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/basic/CircleNode.js new file mode 100644 index 0000000..cc37250 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/basic/CircleNode.js @@ -0,0 +1,33 @@ +import { EllipseResize } from '@logicflow/extension' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 圆形 +class CircleNewModel extends EllipseResize.model { + initNodeData(data) { + super.initNodeData(data) + this.rx = 35 + this.ry = 35 + } + + setToBottom() { + this.zIndex = 0 + } + + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +export default { + type: 'pro-circle', + view: EllipseResize.view, + model: CircleNewModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/basic/DiamondNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/basic/DiamondNode.js new file mode 100644 index 0000000..38dc315 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/basic/DiamondNode.js @@ -0,0 +1,35 @@ +import { DiamondResize } from '@logicflow/extension' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 菱形 +/** + * model控制初始化的值 + */ +class DiamondModel extends DiamondResize.model { + initNodeData(data) { + super.initNodeData(data) + this.rx = 35 + this.ry = 35 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } + + setToBottom() { + this.zIndex = 0 + } +} + +export default { + type: 'pro-diamond', + view: DiamondResize.view, + model: DiamondModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/basic/EllipseNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/basic/EllipseNode.js new file mode 100644 index 0000000..c297638 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/basic/EllipseNode.js @@ -0,0 +1,19 @@ +import CircleNode from './CircleNode' + +// 椭圆 +class EllipseNewModel extends CircleNode.model { + initNodeData(data) { + super.initNodeData(data) + this.rx = 60 + this.ry = 30 + } + getNodeStyle() { + const style = super.getNodeStyle() + return { ...style } + } +} +export default { + type: 'pro-ellipse', + view: CircleNode.view, + model: EllipseNewModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/basic/RectNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/basic/RectNode.js new file mode 100644 index 0000000..ee242e2 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/basic/RectNode.js @@ -0,0 +1,27 @@ +import { RectResize } from '@logicflow/extension' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 矩形 +class RectNewModel extends RectResize.model { + setToBottom() { + this.zIndex = 0 + } + + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +export default { + type: 'pro-rect', + view: RectResize.view, + model: RectNewModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/basic/RectRadiusNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/basic/RectRadiusNode.js new file mode 100644 index 0000000..9a336d6 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/basic/RectRadiusNode.js @@ -0,0 +1,14 @@ +import RectNode from './RectNode' + +// 带圆角的矩形 +class RectRadiusModel extends RectNode.model { + setAttributes() { + super.setAttributes() + this.radius = 20 + } +} +export default { + type: 'rect-radius', + view: RectNode.view, + model: RectRadiusModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/basic/TextNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/basic/TextNode.js new file mode 100644 index 0000000..b3a0911 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/basic/TextNode.js @@ -0,0 +1,37 @@ +import { TextNodeModel, TextNode } from '@logicflow/core' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 文本节点 +class TextNewNode extends TextNode { +} +class TextNewModel extends TextNodeModel { + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + if (properties.backgroundColor) { + style.backgroundStyle = { + fill: properties.backgroundColor + } + } + return getTextStyleFunction(style, properties) + } + + setAttributes() { + super.setAttributes() + if (!this.text.value) { + this.text.value = 'text' + } + } +} + +export default { + type: 'pro-text', + view: TextNewNode, + model: TextNewModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/edge/Bezier.js b/acs/qd/src/views/system/logicflow/editor/components/node/edge/Bezier.js new file mode 100644 index 0000000..ecfc48e --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/edge/Bezier.js @@ -0,0 +1,26 @@ +import { BezierEdge, BezierEdgeModel } from '@logicflow/core' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 贝塞尔曲线 +class Model extends BezierEdgeModel { + constructor(data, graphModel) { + super(data, graphModel) + this.strokeWidth = 1 + } + getTextStyle() { + const style = super.getTextStyle() + return getTextStyleFunction(style, this.properties) + } + + getEdgeStyle() { + const attributes = super.getEdgeStyle() + const properties = this.properties + const style = getShapeStyleFuction(attributes, properties) + return { ...style, fill: 'none' } + } +} +export default { + type: 'pro-bezier', + view: BezierEdge, + model: Model +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/edge/Line.js b/acs/qd/src/views/system/logicflow/editor/components/node/edge/Line.js new file mode 100644 index 0000000..c5ef06e --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/edge/Line.js @@ -0,0 +1,26 @@ +import { LineEdge, LineEdgeModel } from '@logicflow/core' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 直线 +class Model extends LineEdgeModel { + constructor(data, graphModel) { + super(data, graphModel) + this.strokeWidth = 1 + } + getTextStyle() { + const style = super.getTextStyle() + return getTextStyleFunction(style, this.properties) + } + + getEdgeStyle() { + const attributes = super.getEdgeStyle() + const properties = this.properties + const style = getShapeStyleFuction(attributes, properties) + return { ...style, fill: 'none' } + } +} +export default { + type: 'pro-line', + view: LineEdge, + model: Model +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/edge/Polyline.js b/acs/qd/src/views/system/logicflow/editor/components/node/edge/Polyline.js new file mode 100644 index 0000000..86d53c2 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/edge/Polyline.js @@ -0,0 +1,26 @@ +import { PolylineEdge, PolylineEdgeModel } from '@logicflow/core' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 折线 +class Model extends PolylineEdgeModel { + constructor(data, graphModel) { + super(data, graphModel) + this.strokeWidth = 1 + } + getTextStyle() { + const style = super.getTextStyle() + return getTextStyleFunction(style, this.properties) + } + + getEdgeStyle() { + const attributes = super.getEdgeStyle() + const properties = this.properties + const style = getShapeStyleFuction(attributes, properties) + return { ...style, fill: 'none' } + } +} +export default { + type: 'pro-polyline', + view: PolylineEdge, + model: Model +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/getShapeStyleUtil.js b/acs/qd/src/views/system/logicflow/editor/components/node/getShapeStyleUtil.js new file mode 100644 index 0000000..ccea7dd --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/getShapeStyleUtil.js @@ -0,0 +1,70 @@ +export const getShapeStyleFuction = (style, properties) => { + if (properties.backgroundColor) { + style.fill = properties.backgroundColor + } + if (properties.transform) { // 旋转 + style.transform = properties.transform + } + if (properties.imageWidth) { // 宽度 + style.imageWidth = properties.imageWidth + } + if (properties.imageHeight) { // 高度 + style.imageHeight = properties.imageHeight + } + if (properties.gradientColor && style.fill !== properties.gradientColor) { + style.fillGradient = properties.gradientColor + } + if (properties.borderColor) { + style.stroke = properties.borderColor + } + if (properties.borderWidth) { + style.strokeWidth = properties.borderWidth + } + if (properties.borderStyle) { + if (properties.borderStyle === 'solid') { + style.strokeDashArray = '0' + // nodeResize里的bug导致的,array小写了 + style.strokeDasharray = '0' + } + if (properties.borderStyle === 'dashed') { + style.strokeDashArray = '3 3' + style.strokeDasharray = '3 3' + } + if (properties.borderStyle === 'dotted') { + style.strokeDashArray = '1 1' + style.strokeDasharray = '1 1' + } + if (properties.borderStyle === 'hidden') { + style.stroke = style.fill + } + } + return style +} + +export const getTextStyleFunction = (style = {}, properties) => { + if (properties.fontColor) { + style.color = properties.fontColor + } + if (properties.fontSize) { + style.fontSize = properties.fontSize + } + if (properties.fontFamily) { + style.fontFamily = properties.fontFamily + } + if (properties.lineHeight) { + style.lineHeight = properties.lineHeight + } + if (properties.textAlign) { + style.textAlign = properties.textAlign + } + if (properties.fontWeight) { + style.fontWeight = properties.fontWeight + } + if (properties.textDecoration) { + style.textDecoration = properties.textDecoration + } + if (properties.fontStyle) { + style.fontStyle = properties.fontStyle + } + return style +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/html/htmlNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/html/htmlNode.js new file mode 100644 index 0000000..bbd4d84 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/html/htmlNode.js @@ -0,0 +1,89 @@ +import { HtmlResize } from '@logicflow/extension' +import defaultUrl from '../../../image/agv.svg' +import api from '@/store/modules/api' +import tray from '../../../image/托盘.svg' +import icon_alert from '../../../image/icon_alert.png' +class ButtonNodeModel extends HtmlResize.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 100 + this.height = 100 + this.text.draggable = true + this.text.editable = false + } +} + +class ButtonNode extends HtmlResize.view { + setHtml(rootEl) { + /** + * 自己设置的宽高在 imageHeight/imageWidth + * 用拖动设置的宽高在 properties.nodeSize.height/properties.nodeSize.width + */ + const oldNode = this.props.model + const properties = oldNode.getProperties() + // console.log(properties) + // console.log('oldNode', oldNode) + // 路径前缀 + const baseUrl = api.state.baseApi + // 颜色 + let statusColor = '#1a912a' + // 默认图片 + // let imageUrl = baseUrl + '/file/图片/专机-20220722094234555.png' + let imageUrl = defaultUrl + // 托盘图片 + const goods = tray + const trayHeight = Math.round(2 / 3 * oldNode._height) + const trayWidth = Math.round(2 / 3 * oldNode._width) + let trayDisplay = 'none' + // 故障图片 + const fault = icon_alert + let faultDisplay = 'none' + if (properties.imageUrl) { // 与图片尾部拼接 + imageUrl = baseUrl + '/file/图片/' + properties.imageUrl + } + if (!properties.transform) { // 如果没有值,设置默认为0度 + properties.transform = 0 + } + if (properties.isOnline) { + statusColor = '#54dc5f' + } + if (!properties.device) { + statusColor = 'rgba(255,255,255,0)' + } + if (properties.hasGoods) { + // 显示图片,并设置宽高 + trayDisplay = 'flex' + } + if (properties.isError) { + // 显示图片,并设置宽高 + faultDisplay = 'flex' + } + if (properties.isLock !== undefined) { + oldNode.draggable = !properties.isLock + } + const el = document.createElement('div') + el.className = 'uml-wrapper' + // el.id = 'uml-app' + const html = ` +
+
+ + + +
+ ` + el.innerHTML = html + rootEl.innerHTML = '' + rootEl.appendChild(el) + window.setData = () => { + const { graphModel, model } = this.props + graphModel.eventCenter.emit('custom:button-click', model) + } + } +} + +export default { + type: 'html-node', + view: ButtonNode, + model: ButtonNodeModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/index.js b/acs/qd/src/views/system/logicflow/editor/components/node/index.js new file mode 100644 index 0000000..ec1544a --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/index.js @@ -0,0 +1,74 @@ +// 导入组件并且注册 +// 基础图形 +import CircleNode from './basic/CircleNode' +import RectNode from './basic/RectNode' +import RectRadiusNode from './basic/RectRadiusNode' +import EllipseNode from './basic/EllipseNode' +import TextNode from './basic/TextNode' +import DiamondNode from './basic/DiamondNode' +// path绘制的个性化图形 +import CylindeNode from './path/CylindeNode' +import TriangleNode from './path/TriangleNode' +import ParallelogramNode from './path/ParallelogramNode' +import ActorNode from './path/ActorNode' +import StarNode from './path/Star' +import PentagonNode from './path/PentagonNode' +import HexagonNode from './path/HexagonNode' +import SeptagonNode from './path/SeptagonNode' +import HeptagonNode from './path/HeptagonNode' +import TrapezoidNode from './path/TrapezoidNode' +import CrossNode from './path/CrossNode' +import MinusNode from './path/MinusNode' +import TimesNode from './path/TimesNode' +import DivideNode from './path/DivideNode' +// 多边形绘制的箭头 +import LeftArrow from './arrow/LeftArrow' +import RightArrow from './arrow/RightArrow' +import HorizontalArrow from './arrow/HorizontalArrowNode' +import UpArrow from './arrow/UpArrowNode' +import DownArrow from './arrow/DownArrowNode' +import VerticalArrow from './arrow/VerticalArrowNode' +// 注册边 +import Ployline from './edge/Polyline' +import Line from './edge/Line' +import Bezier from './edge/Bezier' +// html图片 +import HtmlNode from './html/htmlNode' + +export const registerCustomElement = (lf) => { + // 注册基础图形 + lf.register(CircleNode) + lf.register(RectNode) + lf.register(RectRadiusNode) + lf.register(EllipseNode) + lf.register(DiamondNode) + lf.register(TextNode) + // 注册path绘制的个性化图形 + lf.register(CylindeNode) + lf.register(TriangleNode) + lf.register(ParallelogramNode) + lf.register(ActorNode) + lf.register(StarNode) + lf.register(PentagonNode) + lf.register(HexagonNode) + lf.register(SeptagonNode) + lf.register(HeptagonNode) + lf.register(TrapezoidNode) + lf.register(CrossNode) + lf.register(MinusNode) + lf.register(TimesNode) + lf.register(DivideNode) + // 注册多边形绘制的箭头 + lf.register(LeftArrow) + lf.register(RightArrow) + lf.register(HorizontalArrow) + lf.register(UpArrow) + lf.register(DownArrow) + lf.register(VerticalArrow) + // 注册边 + lf.register(Ployline) + lf.register(Line) + lf.register(Bezier) + // 注册html结点 + lf.register(HtmlNode) +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/ActorNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/ActorNode.js new file mode 100644 index 0000000..718e511 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/ActorNode.js @@ -0,0 +1,95 @@ +import { h } from '@logicflow/core' +import { RectResize } from '@logicflow/extension' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' +// 人物 +class ActorModel extends RectResize.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 40 + this.height = 80 + } + + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class ActorView extends RectResize.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + // 人物头部圆形 + const ellipseAttrs = { + ...style, + cx: x, + cy: y - 3 / 8 * height, + rx: 1 / 4 * width, + ry: 1 / 8 * height, + width, + height + } + // 人物肩膀横线 + const pathAAttrs = { + ...style, + d: `M ${x - 1 / 2 * width} ${y - 1 / 8 * height} L ${x + 1 / 2 * width} ${y - 1 / 8 * height}` + } + // 人物身体躯干竖线 + const pathBAttrs = { + ...style, + d: `M ${x} ${y - 1 / 4 * height} L ${x} ${y + 1 / 5 * height}` + } + // 人物左腿斜线 + const pathCAttrs = { + ...style, + d: `M ${x} ${y + 1 / 5 * height} L ${x - 1 / 2 * width} ${y + 1 / 2 * height}` + } + // 人物右腿斜线 + const pathDAttrs = { + ...style, + d: `M ${x} ${y + 1 / 5 * height} L ${x + 1 / 2 * width} ${y + 1 / 2 * height}` + } + // 人物透明背景板 + const bgAttrs = { + x: x - 1 / 5 * width, + y: y - 1 / 2 * height, + width: 2 / 5 * width, + height, + style: 'fill: transparent' + } + return h('g', {}, [ + h('ellipse', { + ...ellipseAttrs + }), + h('path', { + ...pathAAttrs + }), + h('path', { + ...pathBAttrs + }), + h('path', { + ...pathCAttrs + }), + h('path', { + ...pathDAttrs + }), + h('rect', { + ...bgAttrs + }) + ] + ) + } +} + +export default { + type: 'actor', + view: ActorView, + model: ActorModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/CrossNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/CrossNode.js new file mode 100644 index 0000000..a9b4bbc --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/CrossNode.js @@ -0,0 +1,65 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 加号 +class CrossModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 80 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class CrossView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const pointList = [ + [x - 1 / 2 * width, y - 1 / 6 * height], + [x - 1 / 6 * width, y - 1 / 6 * height], + [x - 1 / 6 * width, y - 1 / 2 * height], + [x + 1 / 6 * width, y - 1 / 2 * height], + [x + 1 / 6 * width, y - 1 / 6 * height], + [x + 1 / 2 * width, y - 1 / 6 * height], + [x + 1 / 2 * width, y + 1 / 6 * height], + [x + 1 / 6 * width, y + 1 / 6 * height], + [x + 1 / 6 * width, y + 1 / 2 * height], + [x - 1 / 6 * width, y + 1 / 2 * height], + [x - 1 / 6 * width, y + 1 / 6 * height], + [x - 1 / 2 * width, y + 1 / 6 * height] + ] + const points = pointList.map(item => { + return `${item[0]},${item[1]}` + }) + const attrs = { + ...style, + x, + y, + width, + height, + points: points.join(' ') + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ]) + } +} + +export default { + type: 'cross', + view: CrossView, + model: CrossModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/CylindeNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/CylindeNode.js new file mode 100644 index 0000000..a719c7e --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/CylindeNode.js @@ -0,0 +1,92 @@ +import { h } from '@logicflow/core' +import { RectResize } from '@logicflow/extension' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 圆柱体 +class CylindeModel extends RectResize.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 60 + this.height = 80 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class CylindeView extends RectResize.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + // 圆柱体顶部椭圆 + const ellipseAAttrs = { + ...style, + cx: x, + cy: y - 1 / 3 * height, + rx: 1 / 2 * width, + ry: 1 / 6 * height, + width, + height + } + // 圆柱体左直线 + const pathAAttrs = { + ...style, + d: `M ${x - 1 / 2 * width} ${y - 1 / 3 * height} L ${x - 1 / 2 * width} ${y + 1 / 3 * height}` + } + // 圆柱体右直线 + const pathBAttrs = { + ...style, + d: `M ${x + 1 / 2 * width} ${y - 1 / 3 * height} L ${x + 1 / 2 * width} ${y + 1 / 3 * height}` + } + // 圆柱体下椭圆 + const ellipseBAttrs = { + ...style, + cx: x, + cy: y + 1 / 3 * height, + rx: 1 / 2 * width, + ry: 1 / 6 * height, + width, + height + } + // 圆柱体中间填充部分 + const rectAttrs = { + ...style, + x: x - 1 / 2 * width, + y: y - 1 / 3 * height, + width, + height: 2 / 3 * height, + stroke: 'transparent' + } + return h('g', {}, [ + h('ellipse', { + ...ellipseBAttrs + }), + h('rect', { + ...rectAttrs + }), + h('path', { + ...pathAAttrs + }), + h('path', { + ...pathBAttrs + }), + h('ellipse', { + ...ellipseAAttrs + }) + ]) + } +} + +export default { + type: 'cylinde', + model: CylindeModel, + view: CylindeView +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/DivideNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/DivideNode.js new file mode 100644 index 0000000..1fa2d98 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/DivideNode.js @@ -0,0 +1,83 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 除号 +class DivideModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 80 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class DivideView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const pointList = [ + [x - 1 / 2 * width, y - 1 / 8 * height], + [x + 1 / 2 * width, y - 1 / 8 * height], + [x + 1 / 2 * width, y + 1 / 8 * height], + [x - 1 / 2 * width, y + 1 / 8 * height] + ] + const points = pointList.map(item => { + return `${item[0]},${item[1]}` + }) + + const attrs = { + ...style, + x, + y, + width, + height + } + + // 除号中间横线 + const lineAttrs = { + ...attrs, + points: points.join(' ') + } + + // 除号上圆点 + const upEllipseAttrs = { + ...attrs, + cy: y - 3 / 8 * height, + cx: x, + rx: 1 / 8 * width, + ry: 1 / 8 * height + } + + // 除号下圆点 + const downEllipseAttrs = { + ...attrs, + cy: y + 3 / 8 * height, + cx: x, + rx: 1 / 8 * width, + ry: 1 / 8 * height + } + + return h('g', {}, [ + h('polygon', { ...lineAttrs }), + h('ellipse', { ...upEllipseAttrs }), + h('ellipse', { ...downEllipseAttrs }) + ]) + } +} + +export default { + type: 'divide', + view: DivideView, + model: DivideModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/HeptagonNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/HeptagonNode.js new file mode 100644 index 0000000..b28d42b --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/HeptagonNode.js @@ -0,0 +1,61 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 五边形 +class HeptagonModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 80 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class HeptagonView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const pointList = [ + [x - 0.205 * width, y - 0.5 * height], + [x + 0.205 * width, y - 0.5 * height], + [x + 0.5 * width, y - 0.205 * height], + [x + 0.5 * width, y + 0.205 * height], + [x + 0.205 * width, y + 0.5 * height], + [x - 0.205 * width, y + 0.5 * height], + [x - 0.5 * width, y + 0.205 * height], + [x - 0.5 * width, y - 0.205 * height] + ] + const points = pointList.map(item => { + return `${item[0]},${item[1]}` + }) + const attrs = { + ...style, + x, + y, + width, + height, + points: points.join(' ') + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ]) + } +} + +export default { + type: 'heptagon', + view: HeptagonView, + model: HeptagonModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/HexagonNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/HexagonNode.js new file mode 100644 index 0000000..a0e281f --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/HexagonNode.js @@ -0,0 +1,59 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 六边形 +class HexagonModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 80 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class HexagonView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const pointList = [ + [x - 0.28 * width, y - 0.5 * height], + [x + 0.28 * width, y - 0.5 * height], + [x + 0.5 * width, y], + [x + 0.28 * width, y + 0.5 * height], + [x - 0.28 * width, y + 0.5 * height], + [x - 0.5 * width, y] + ] + const points = pointList.map(item => { + return `${item[0]},${item[1]}` + }) + const attrs = { + ...style, + x, + y, + width, + height, + points: points.join(' ') + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ]) + } +} + +export default { + type: 'hexagon', + view: HexagonView, + model: HexagonModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/MinusNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/MinusNode.js new file mode 100644 index 0000000..5f29f1e --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/MinusNode.js @@ -0,0 +1,57 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 减号 +class MinusModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 20 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class MinusView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const pointList = [ + [x - 1 / 2 * width, y - 1 / 2 * height], + [x + 1 / 2 * width, y - 1 / 2 * height], + [x + 1 / 2 * width, y + 1 / 2 * height], + [x - 1 / 2 * width, y + 1 / 2 * height] + ] + const points = pointList.map(item => { + return `${item[0]},${item[1]}` + }) + const attrs = { + ...style, + x, + y, + width, + height, + points: points.join(' ') + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ]) + } +} + +export default { + type: 'minus', + view: MinusView, + model: MinusModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/ParallelogramNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/ParallelogramNode.js new file mode 100644 index 0000000..96b07f8 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/ParallelogramNode.js @@ -0,0 +1,57 @@ +import { h } from '@logicflow/core' +import { RectResize } from '@logicflow/extension' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 平行四边形 +class ParallelogramModel extends RectResize.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 100 + this.height = 60 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class ParallelogramView extends RectResize.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const pointList = [ + [x - width / 2, y + height / 2], + [x - width / 5, y - height / 2], + [x + width / 2, y - height / 2], + [x + width / 5, y + height / 2] + ] + const points = pointList.map(item => { + return `${item[0]},${item[1]}` + }) + const attrs = { + ...style, + x, + y, + width, + height, + points: points.join(' ') + } + return h('g', {}, [ + h('polygon', { ...attrs }) + ] + ) + } +} + +export default { + type: 'parallelogram', + view: ParallelogramView, + model: ParallelogramModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/PentagonNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/PentagonNode.js new file mode 100644 index 0000000..0bf20aa --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/PentagonNode.js @@ -0,0 +1,58 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 八边形 +class PentagonModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 80 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class PentagonView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const pointList = [ + [x - 0.5 * width, y], + [x, y - 0.5 * height], + [x + 0.5 * width, y], + [x + 0.3 * width, y + 0.5 * height], + [x - 0.3 * width, y + 0.5 * height] + ] + const points = pointList.map(item => { + return `${item[0]},${item[1]}` + }) + const attrs = { + ...style, + x, + y, + width, + height, + points: points.join(' ') + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ]) + } +} + +export default { + type: 'pentagon', + view: PentagonView, + model: PentagonModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/SeptagonNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/SeptagonNode.js new file mode 100644 index 0000000..9ea030a --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/SeptagonNode.js @@ -0,0 +1,60 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 七边形 +class SeptagonModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 80 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class SeptagonView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const pointList = [ + [x, y - 0.5 * height], + [x + 0.395 * width, y - 0.3 * height], + [x + 0.5 * width, y + 0.145 * height], + [x + 0.225 * width, y + 0.5 * height], + [x - 0.225 * width, y + 0.5 * height], + [x - 0.5 * width, y + 0.145 * height], + [x - 0.395 * width, y - 0.3 * height] + ] + const points = pointList.map(item => { + return `${item[0]},${item[1]}` + }) + const attrs = { + ...style, + x, + y, + width, + height, + points: points.join(' ') + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ]) + } +} + +export default { + type: 'septagon', + view: SeptagonView, + model: SeptagonModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/Star.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/Star.js new file mode 100644 index 0000000..28eaede --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/Star.js @@ -0,0 +1,40 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' + +// 五角星 +class StarModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 80 + } +} + +class StarView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const svgAttr = { + x: x - 1 / 2 * width, + y: y - 1 / 2 * height, + width, + height + } + const pathAAttrs = { + ...style, + d: 'm0.36922,13.46587l12.98695,0l4.01307,-13.36885l4.01307,13.36885l12.98694,0l-10.50664,8.26231l4.01327,13.36885l-10.50665,-8.26253l-10.50664,8.26253l4.01327,-13.36885l-10.50665,-8.26231l0,0z' + } + + return h('svg', { ...svgAttr, viewBox: '0 0 37 37' }, [ + h('path', { + ...pathAAttrs + }) + ]) + } +} + +export default { + type: 'star', + view: StarView, + model: StarModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/TimesNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/TimesNode.js new file mode 100644 index 0000000..6d67a2f --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/TimesNode.js @@ -0,0 +1,65 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 乘号 +class TimesModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 80 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class TimesView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const pointList = [ + [x - 1 / 2 * width, y - 1 / 3 * height], + [x - 1 / 3 * width, y - 1 / 2 * height], + [x, y - 1 / 6 * height], + [x + 1 / 3 * width, y - 1 / 2 * height], + [x + 1 / 2 * width, y - 1 / 3 * height], + [x + 1 / 6 * width, y], + [x + 1 / 2 * width, y + 1 / 3 * height], + [x + 1 / 3 * width, y + 1 / 2 * height], + [x, y + 1 / 6 * height], + [x - 1 / 3 * width, y + 1 / 2 * height], + [x - 1 / 2 * width, y + 1 / 3 * height], + [x - 1 / 6 * width, y] + ] + const points = pointList.map(item => { + return `${item[0]},${item[1]}` + }) + const attrs = { + ...style, + x, + y, + width, + height, + points: points.join(' ') + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ]) + } +} + +export default { + type: 'times', + view: TimesView, + model: TimesModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/TrapezoidNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/TrapezoidNode.js new file mode 100644 index 0000000..3ffe197 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/TrapezoidNode.js @@ -0,0 +1,57 @@ +import { h } from '@logicflow/core' +import RectNode from '../basic/RectNode' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 五边形 +class TrapezoidModel extends RectNode.model { + initNodeData(data) { + super.initNodeData(data) + this.width = 80 + this.height = 80 + } + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class TrapezoidView extends RectNode.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const pointList = [ + [x - 0.31 * width, y - 0.5 * height], + [x + 0.31 * width, y - 0.5 * height], + [x + 0.5 * width, y + 0.5 * height], + [x - 0.5 * width, y + 0.5 * height] + ] + const points = pointList.map(item => { + return `${item[0]},${item[1]}` + }) + const attrs = { + ...style, + x, + y, + width, + height, + points: points.join(' ') + } + + return h('g', {}, [ + h('polygon', { ...attrs }) + ]) + } +} + +export default { + type: 'trapezoid', + view: TrapezoidView, + model: TrapezoidModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/components/node/path/TriangleNode.js b/acs/qd/src/views/system/logicflow/editor/components/node/path/TriangleNode.js new file mode 100644 index 0000000..67ff9e3 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/components/node/path/TriangleNode.js @@ -0,0 +1,47 @@ +import { h } from '@logicflow/core' +import { RectResize } from '@logicflow/extension' +import { getShapeStyleFuction, getTextStyleFunction } from '../getShapeStyleUtil' + +// 三角形 +class TriangleModel extends RectResize.model { + getNodeStyle() { + const style = super.getNodeStyle() + const properties = this.getProperties() + return getShapeStyleFuction(style, properties) + } + + getTextStyle() { + const style = super.getTextStyle() + const properties = this.getProperties() + return getTextStyleFunction(style, properties) + } +} + +class TriangleView extends RectResize.view { + getResizeShape() { + const { x, y, width, height } = this.props.model + const style = this.props.model.getNodeStyle() + const attrs = { + ...style, + x, + y, + width, + height, + points: [ + [x - width / 2, y + height / 2], + [x - width / 2, y - height / 2], + [x + width / 2, y] + ] + } + return h('g', {}, [ + h('polygon', { ...attrs }) + ] + ) + } +} + +export default { + type: 'triangle', + view: TriangleView, + model: TriangleModel +} diff --git a/acs/qd/src/views/system/logicflow/editor/constant/index.js b/acs/qd/src/views/system/logicflow/editor/constant/index.js new file mode 100644 index 0000000..710a725 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/constant/index.js @@ -0,0 +1,69 @@ +export const shortStyles = [ + { + backgroundColor: 'rgb(255, 255, 255)', + borderWidth: '1px', + borderColor: 'rgb(42, 42, 42)' + }, + { + backgroundColor: 'rgb(245, 245, 245)', + borderWidth: '1px', + borderColor: 'rgb(102, 102, 102)' + }, + { + backgroundColor: 'rgb(218, 232, 252)', + borderWidth: '1px', + borderColor: 'rgb(108, 142, 191)' + }, + { + backgroundColor: 'rgb(213, 232, 212)', + borderWidth: '1px', + borderColor: 'rgb(130, 179, 102)' + }, + { + backgroundColor: 'rgb(255, 230, 204)', + borderWidth: '1px', + borderColor: 'rgb(215, 155, 0)' + }, + { + backgroundColor: 'rgb(255, 242, 204)', + borderWidth: '1px', + borderColor: 'rgb(214, 182, 86)' + }, + { + backgroundColor: 'rgb(248, 206, 204)', + borderWidth: '1px', + borderColor: 'rgb(184, 84, 80)' + }, + { + backgroundColor: 'rgb(220, 210, 230)', + borderWidth: '1px', + borderColor: 'rgb(150, 115, 166)' + } +] + +export const borderStyles = [ + { + value: 'solid' + }, + { + value: 'dashed' + }, + { + value: 'dotted' + } +] + +export const fontFamilies = [ + { + value: 'Arial' + }, + { + value: 'Verdana' + }, + { + value: 'Georgia' + }, + { + value: 'Times New Roman' + } +] diff --git a/acs/qd/src/views/system/logicflow/editor/image/agv.svg b/acs/qd/src/views/system/logicflow/editor/image/agv.svg new file mode 100644 index 0000000..d7a91d4 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/image/agv.svg @@ -0,0 +1,60 @@ + + + + agv@1x + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/acs/qd/src/views/system/logicflow/editor/image/icon_alert.png b/acs/qd/src/views/system/logicflow/editor/image/icon_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..c224792e5be02bea43d6c1eb85ea6649241f7282 GIT binary patch literal 1649 zcmV-%29EiOP)G%)5j~=y{_Yz>d z3Hgnk$X&JQUiWmTKd6>w;Oi?Q&~XDmYX{WAz%uNBa$YY3=@)!8Qz!D6E4?#%>m|hI zJ!rVzr7wwpS7mVri=GGn{yk8*XaO{u&hiSO?EY{L z_J1%RFdhW+AS*DF6*3BkvzN2oW$fIt$53KMhQ;P&Ym3Apy;r-$9@Tjb5r=0pW#B;d zcp$0O*FZ#rk>3#g`!LwJgL`XAUh8W=P?k;ZH8YXlI)=P?FScxa9=UfbYW@cNv$FVd zs{efYGHbw#T5OtwU zgy1@eolH{bmmH*tXM;-P|GT9<$5wS#ZaW5Vl7rU{2{R;VItI<{I+>xpz z#@!U@Jg+(`_5wuR;NMqA#Ul=~)Wn!#nvc8Z$*Iao#TIp@T^TZJ1hoA`3Nbn_Ixtd% zcz{^55a>Kifk>IFur2-o zq3y>`6x0kwVE_dx=y2b($)I!XST{w^VYM=VZmihU)g^@y1vLW^q%5Ld9BlKKpi6Zg z63UXR%IR~gtOwTNNh%4X?1zg8jbfEDfytz3$_8_8E<|q|i0Xk%p)zfPytxbU>h6to?DW!ck$#!xjD+uZ`{x`X5bhXvw|#e% zrzQCvcauOAPmRSFiaoL^V{`thubcYX|F2~3s*)|D0LFYjVAONk;J>SC@}_@c^lwFo zsw%npR~MLK8Rb~M3vQTwj~_QVm)P z>4_*Ep+rHezBuRS9Ue)k%3QlsEtTxFN8W1t| za{?<|z7;GsD}nt&5p`bgL_sl%3f)+GS_qFWUg!!~hgzBKg>ppB*U?q4PqmpCcZ(3! zd1epyUV+ShLmbPt(RrPt^J*i5qIOWHbkYK}Hk=dz!hlH=NJeiTtr>fST(SUH?BLtH z0VGZP!{Kyrzi|Agrj85MC+ z5e;Jrz|OgdB82`dA_dsQS@EZJ~cN5y?zrvk@s%tk87e3(&4#1o}*xZC6ho zW^UD4M*RM4P}y2kao?oK%M50-87k`dguC|FZ?I=`!f0$39;57O>l7N00000NkvXXu0mjf%5&;E literal 0 HcmV?d00001 diff --git a/acs/qd/src/views/system/logicflow/editor/image/托盘.svg b/acs/qd/src/views/system/logicflow/editor/image/托盘.svg new file mode 100644 index 0000000..552024a --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/image/托盘.svg @@ -0,0 +1,14 @@ + + + + 托盘@1x + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/acs/qd/src/views/system/logicflow/editor/index.vue b/acs/qd/src/views/system/logicflow/editor/index.vue new file mode 100644 index 0000000..ee3483a --- /dev/null +++ b/acs/qd/src/views/system/logicflow/editor/index.vue @@ -0,0 +1,34 @@ + + + + + + diff --git a/acs/qd/src/views/system/logicflow/image/index.vue b/acs/qd/src/views/system/logicflow/image/index.vue new file mode 100644 index 0000000..6c1eb64 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/image/index.vue @@ -0,0 +1,310 @@ + + + + + diff --git a/acs/qd/src/views/system/logicflow/index.vue b/acs/qd/src/views/system/logicflow/index.vue new file mode 100644 index 0000000..90c77e1 --- /dev/null +++ b/acs/qd/src/views/system/logicflow/index.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/acs/qd/src/views/system/logicflow/monitor/index.vue b/acs/qd/src/views/system/logicflow/monitor/index.vue new file mode 100644 index 0000000..91a504d --- /dev/null +++ b/acs/qd/src/views/system/logicflow/monitor/index.vue @@ -0,0 +1,559 @@ + + + + + +