Parcourir la source

工艺改成可以并行的流程图模式

yzc il y a 1 an
Parent
commit
7dc58a092a

+ 19 - 0
hx-mes/src/main/java/com/fjhx/mes/controller/technology/TechnologyProcessLineController.java

@@ -0,0 +1,19 @@
+package com.fjhx.mes.controller.technology;
+
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * <p>
+ * 工艺线路 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-11
+ */
+@RestController
+@RequestMapping("/technologyProcessLine")
+public class TechnologyProcessLineController {
+
+
+}

+ 6 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/technology/dto/TechnologyDto.java

@@ -3,6 +3,7 @@ package com.fjhx.mes.entity.technology.dto;
 import com.fjhx.file.entity.ObsFile;
 import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
 import com.fjhx.mes.entity.technology.po.Technology;
+import com.fjhx.mes.entity.technology.po.TechnologyProcessLine;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -28,4 +29,9 @@ public class TechnologyDto extends Technology {
      */
     private List<String> processRouteList;
 
+    /**
+     * 工艺线路连线列表
+     */
+    private List<TechnologyProcessLine> technologyProcessLineList;
+
 }

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/technology/dto/TechnologyProcessLineDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.entity.technology.dto;
+
+import com.fjhx.mes.entity.technology.po.TechnologyProcessLine;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 工艺线路新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-12-11
+ */
+@Getter
+@Setter
+public class TechnologyProcessLineDto extends TechnologyProcessLine {
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/technology/dto/TechnologyProcessLineSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.entity.technology.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 工艺线路列表查询入参实体
+ *
+ * @author 
+ * @since 2023-12-11
+ */
+@Getter
+@Setter
+public class TechnologyProcessLineSelectDto extends BaseSelectDto {
+
+}

+ 5 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/technology/po/Technology.java

@@ -34,4 +34,9 @@ public class Technology extends BasePo {
      */
     private String remarks;
 
+    /**
+     * 工艺线路 流程图JSON
+     */
+    private String nodeObject;
+
 }

+ 37 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/technology/po/TechnologyProcessLine.java

@@ -0,0 +1,37 @@
+package com.fjhx.mes.entity.technology.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 工艺线路
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-11
+ */
+@Getter
+@Setter
+@TableName("technology_process_line")
+public class TechnologyProcessLine extends BasePo {
+
+    /**
+     * 工艺id
+     */
+    private Long technologyId;
+
+    /**
+     * 来源工序id
+     */
+    private Long sourceProcessesId;
+
+    /**
+     * 目标工序id
+     */
+    private Long targetProcessesId;
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/technology/vo/TechnologyProcessLineVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.entity.technology.vo;
+
+import com.fjhx.mes.entity.technology.po.TechnologyProcessLine;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 工艺线路列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-12-11
+ */
+@Getter
+@Setter
+public class TechnologyProcessLineVo extends TechnologyProcessLine {
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/mapper/technology/TechnologyProcessLineMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.mapper.technology;
+
+import com.fjhx.mes.entity.technology.po.TechnologyProcessLine;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * <p>
+ * 工艺线路 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-11
+ */
+public interface TechnologyProcessLineMapper extends BaseMapper<TechnologyProcessLine> {
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/service/technology/TechnologyProcessLineService.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.service.technology;
+
+import com.fjhx.mes.entity.technology.po.TechnologyProcessLine;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 工艺线路 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-11
+ */
+public interface TechnologyProcessLineService extends BaseService<TechnologyProcessLine> {
+
+}

+ 21 - 0
hx-mes/src/main/java/com/fjhx/mes/service/technology/impl/TechnologyProcessLineServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fjhx.mes.service.technology.impl;
+
+import com.fjhx.mes.entity.technology.po.TechnologyProcessLine;
+import com.fjhx.mes.mapper.technology.TechnologyProcessLineMapper;
+import com.fjhx.mes.service.technology.TechnologyProcessLineService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 工艺线路 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-11
+ */
+@Service
+public class TechnologyProcessLineServiceImpl extends ServiceImpl<TechnologyProcessLineMapper, TechnologyProcessLine> implements TechnologyProcessLineService {
+
+}

+ 82 - 9
hx-mes/src/main/java/com/fjhx/mes/service/technology/impl/TechnologyServiceImpl.java

@@ -2,10 +2,14 @@ package com.fjhx.mes.service.technology.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.common.utils.Assert;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
@@ -13,20 +17,18 @@ import com.fjhx.mes.entity.production.po.ProductionProcesses;
 import com.fjhx.mes.entity.technology.dto.TechnologyDto;
 import com.fjhx.mes.entity.technology.dto.TechnologySelectDto;
 import com.fjhx.mes.entity.technology.po.Technology;
+import com.fjhx.mes.entity.technology.po.TechnologyProcessLine;
 import com.fjhx.mes.entity.technology.vo.TechnologyVo;
 import com.fjhx.mes.mapper.technology.TechnologyMapper;
 import com.fjhx.mes.service.applicable.ApplicableProductsService;
 import com.fjhx.mes.service.production.ProductionProcessesService;
+import com.fjhx.mes.service.technology.TechnologyProcessLineService;
 import com.fjhx.mes.service.technology.TechnologyService;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -48,6 +50,8 @@ public class TechnologyServiceImpl extends ServiceImpl<TechnologyMapper, Technol
     ApplicableProductsService applicableProductsService;
     @Autowired
     ProductInfoService productInfoService;
+    @Autowired
+    private TechnologyProcessLineService technologyProcessLineService;
 
     @Override
     public Page<TechnologyVo> getPage(TechnologySelectDto dto) {
@@ -73,7 +77,7 @@ public class TechnologyServiceImpl extends ServiceImpl<TechnologyMapper, Technol
                     for (ApplicableProducts applicableProducts : applicableProductsList1) {
                         ProductInfo productInfo = productInfoMap.get(applicableProducts.getProductId());
                         if (ObjectUtil.isNotEmpty(productInfo)) {
-                            productNameList.add(productInfo.getName()+"("+productInfo.getSpec()+")");
+                            productNameList.add(productInfo.getName() + "(" + productInfo.getSpec() + ")");
                         } else {
                             productNameList.add("未知商品:" + applicableProducts.getProductId());
                         }
@@ -140,7 +144,7 @@ public class TechnologyServiceImpl extends ServiceImpl<TechnologyMapper, Technol
         return result;
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @DSTransactional
     @Override
     public void add(TechnologyDto technologyDto) {
         String join = String.join(",", technologyDto.getProcessRouteList());
@@ -151,9 +155,15 @@ public class TechnologyServiceImpl extends ServiceImpl<TechnologyMapper, Technol
             applicableProducts.setTechnologyId(technologyDto.getId());
         }
         applicableProductsService.saveBatch(productList);
+
+        //保存工艺线路列表
+        List<TechnologyProcessLine> technologyProcessLines = analysisJsonData(technologyDto);
+        if (ObjectUtil.isNotEmpty(technologyProcessLines)) {
+            technologyProcessLineService.saveBatch(technologyProcessLines);
+        }
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @DSTransactional
     @Override
     public void edit(TechnologyDto technologyDto) {
         String join = String.join(",", technologyDto.getProcessRouteList());
@@ -165,13 +175,76 @@ public class TechnologyServiceImpl extends ServiceImpl<TechnologyMapper, Technol
             applicableProducts.setTechnologyId(technologyDto.getId());
         }
         applicableProductsService.saveBatch(productList);
+
+        //修改工艺线路列表,只能全删了再创建
+        technologyProcessLineService.remove(q -> q.eq(TechnologyProcessLine::getTechnologyId, technologyDto.getId()));
+        List<TechnologyProcessLine> technologyProcessLines = analysisJsonData(technologyDto);
+        if (ObjectUtil.isNotEmpty(technologyProcessLines)) {
+            technologyProcessLineService.saveBatch(technologyProcessLines);
+        }
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @DSTransactional
     @Override
     public void delete(Long id) {
         this.removeById(id);
         applicableProductsService.remove(q -> q.eq(ApplicableProducts::getTechnologyId, id));
     }
 
+    /**
+     * 处理流程图JSON
+     */
+    private List<TechnologyProcessLine> analysisJsonData(TechnologyDto technologyDto) {
+        //读取流程图json信息
+        JSONArray nodeObject = JSONArray.parseArray(technologyDto.getNodeObject());
+        //遍历信息
+        Map<String, JSONObject> nodeMap = new HashMap<>();
+        List<JSONObject> lineList = new ArrayList<>();
+        for (int i = 0; i < nodeObject.size(); i++) {
+            JSONObject json = nodeObject.getJSONObject(i);
+            String shape = json.getString("shape");
+            //节点
+            if (shape.equals("handle-btn")) {
+                nodeMap.put(json.getString("id"), json);
+            }
+            //线
+            if (shape.equals("edge")) {
+                lineList.add(json);
+            }
+        }
+
+        List<TechnologyProcessLine> technologyProcessLineList = new ArrayList<>();
+
+        for (JSONObject jsonObject : lineList) {
+            JSONObject source = jsonObject.getJSONObject("source");
+            String sourceCell = source.getString("cell");
+            JSONObject target = jsonObject.getJSONObject("target");
+            String targetCell = target.getString("cell");
+
+            TechnologyProcessLine technologyProcessLine = new TechnologyProcessLine();
+            //读取源节点信息
+            if (sourceCell.equals("1") || sourceCell.equals("2")) {
+                technologyProcessLine.setSourceProcessesId(Long.parseLong(sourceCell));
+            } else {
+                JSONObject from = nodeMap.get(sourceCell);
+                Assert.notEmpty(from, "查询不到节点信息:" + sourceCell);
+                technologyProcessLine.setSourceProcessesId(from.getLong("productionId"));
+            }
+            //读取目标节点信息
+            if (targetCell.equals("1") || targetCell.equals("2")) {
+                technologyProcessLine.setTargetProcessesId(Long.parseLong(targetCell));
+            } else {
+                JSONObject to = nodeMap.get(targetCell);
+                Assert.notEmpty(to, "查询不到节点信息:" + targetCell);
+                technologyProcessLine.setTargetProcessesId(to.getLong("productionId"));
+            }
+
+            technologyProcessLine.setTechnologyId(technologyDto.getId());
+
+            technologyProcessLineList.add(technologyProcessLine);
+        }
+
+        return technologyProcessLineList;
+    }
+
 }

+ 4 - 0
hx-mes/src/main/resources/mapper/technology/TechnologyProcessLineMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.mes.mapper.technology.TechnologyProcessLineMapper">
+</mapper>