Browse Source

清表元素识别关联wbs表

liuyc 3 years ago
parent
commit
fe0c59513a

+ 78 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormElementDTO2.java

@@ -0,0 +1,78 @@
+package org.springblade.manager.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springblade.manager.entity.WbsFormElement;
+import org.springblade.manager.entity.WbsTree;
+
+import java.util.List;
+
+/**
+ * 表单、元素传输对象实体类
+ *
+ * @author liuyc
+ * @since 2022-04-27
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class FormElementDTO2 extends WbsTree {
+    private static final long serialVersionUID = 1L;
+    /**
+     * wbs库id
+     */
+    @ApiModelProperty(value = "wbs库id",required = true)
+    private String wbsId;
+    /**
+     * 租户id
+     */
+    @ApiModelProperty(value = "租户id",required = true)
+    private String tenantId;
+
+    /**
+     * 父主键
+     */
+    @ApiModelProperty(value = "父主键id",required = true)
+    private Long parentId;
+
+    /**
+     * 部门类型
+     */
+    @ApiModelProperty(value = "节点类型",required = true)
+    private Integer deptCategory;
+
+    /**
+     * 部门名
+     */
+    @ApiModelProperty(value = "节点名称",required = true)
+    private String deptName;
+    /**
+     * 表单类型
+     */
+    @ApiModelProperty(value = "表单类型",required = true)
+    private Integer tableType;
+
+    /**
+     * 排序
+     */
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    /**
+     * 元素集合
+     */
+    @ApiModelProperty(value = "元素集合")
+    private List<WbsFormElement> elementList;
+
+    /**
+     * 元素ids集合
+     */
+    @ApiModelProperty(value = "元素表ids")
+    private List<String> tableIds;
+
+
+
+}

+ 17 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java

@@ -19,11 +19,14 @@ package org.springblade.manager.controller;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
+
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.dto.FormElementDTO;
+import org.springblade.manager.dto.FormElementDTO2;
 import org.springblade.manager.dto.WbsFormElementDTO;
 import org.springblade.manager.dto.WbsFormElementDTO2;
 import org.springblade.manager.entity.WbsFormElement;
@@ -36,6 +39,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springblade.manager.service.IWbsFormElementService;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springframework.web.multipart.MultipartFile;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -206,9 +210,21 @@ public class WbsFormElementController extends BladeController {
     @ApiOperationSupport(order = 9)
     @ApiOperation(value = "提交清表关联公有Wbs树并创建元素", notes = "节点id、表名、元素DTO")
     @RequestMapping(value = "/submitExcelRelationWbsTreeAndElement", method = RequestMethod.POST)
-    public R submitExcelRelationWbsTreeAndElement(@RequestBody FormElementDTO formElementDTO) {
+    public R submitExcelRelationWbsTreeAndElement(@RequestBody FormElementDTO2 formElementDTO) {
         return R.status(wbsFormElementService.submitExcelRelationWbsTreeAndElement(formElementDTO));
     }
 
+    /**
+     * 元素识别取消关联公有wbs表
+     */
+    @ApiOperationSupport(order = 10)
+    @ApiOperation(value = "元素识别取消关联公有wbs表", notes = "传入表id")
+    @RequestMapping(value = "/cancelRelation", method = RequestMethod.GET)
+    public R cancelRelation(String id) {
+        if (wbsFormElementService.cancelRelation(id)) {
+            return R.success("取消成功");
+        }
+        return R.fail(200, "操作失败");
+    }
 
 }

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java

@@ -106,4 +106,7 @@ public interface WbsTreeMapper extends BaseMapper<WbsTree> {
     void updateByParentId(Long parentId, Long id);
 
     int deleteLogicById(@Param("id") String id);
+
+    boolean cancelRelation(String id);
+
 }

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -188,6 +188,10 @@
         DELETE FROM m_wbs_tree WHERE id = #{id} OR project_node_id = #{id} OR ancestors like concat('%',#{id},'%')
     </delete>
 
+    <delete id="cancelRelation">
+        UPDATE m_wbs_tree SET is_link_table = 1 WHERE id = #{id}
+    </delete>
+
     <update id="deleteLogicByWbsId">
         update m_wbs_tree set is_deleted = 1 where wbs_id = #{ids} and status = 1
     </update>

+ 4 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsFormElementService.java

@@ -21,6 +21,7 @@ import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.dto.FormElementDTO;
+import org.springblade.manager.dto.FormElementDTO2;
 import org.springblade.manager.dto.WbsFormElementDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.excel.WbsFormElementBatchExcel;
@@ -70,6 +71,8 @@ public interface IWbsFormElementService extends BaseService<WbsFormElement> {
 
     boolean submitBatch(WbsFormElementVO2 wbsFormElementVO2);
 
-    boolean submitExcelRelationWbsTreeAndElement(FormElementDTO formElementDTO);
+    boolean submitExcelRelationWbsTreeAndElement(FormElementDTO2 formElementDTO);
+
+    boolean cancelRelation(String id);
 
 }

+ 57 - 52
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -37,6 +37,7 @@ import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.FormElementDTO;
+import org.springblade.manager.dto.FormElementDTO2;
 import org.springblade.manager.dto.WbsFormElementDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
@@ -368,68 +369,72 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean submitExcelRelationWbsTreeAndElement(FormElementDTO formElementDTO) {
+    public boolean submitExcelRelationWbsTreeAndElement(FormElementDTO2 formElementDTO) {
         //新增元素表、实体表
-        if (formElementDTO.getId() == null) {
+        if (formElementDTO.getTableIds() == null) {
             this.saveFormElement(formElementDTO);
+
         } else {
             //关联-在已有元素表中新增元素,在实体表中追加字段
-            //获取当前元素表中的所有的元素信息
-            List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda()
-                    .eq(WbsFormElement::getFId, formElementDTO.getId()));
-            Collections.reverse(wbsFormElements);
-            WbsFormElement firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
-
-            //初始化eKey字段
-            int keyNumber = Integer.parseInt(firstWbsFormElement.getEKey().split("_")[1]);
-            List<WbsFormElement> newList = formElementDTO.getElementList().stream().filter(a ->
-                    !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
-            ).collect(Collectors.toList());
-
-            final int[] keyNumber1 = {1};
-
-            //新增
-            newList.stream().forEach(wbsFormElementInfo -> {
-                String key = "key_" + (keyNumber + keyNumber1[0]);
-
-                //新增元素到当前表中
-                wbsFormElementInfo.setEKey(key);
-                wbsFormElementInfo.setId(SnowFlakeUtil.getId());
-                wbsFormElementInfo.setFId(String.valueOf(formElementDTO.getId()));
-                wbsFormElementInfo.setStatus(1);
-
-                baseMapper.insert(wbsFormElementInfo);
-
-                //追加实体表字段
-                wbsTreeMapper.alterTableFiled(formElementDTO.getInitTableName(), key,
-                        getInitTableFiledType(wbsFormElementInfo.getEType()),
-                        Integer.valueOf(setDefaultElementLength(wbsFormElementInfo.getEType())));
-                keyNumber1[0]++;
-            });
-        }
+            List<String> tableIds = formElementDTO.getTableIds();
+            if (tableIds.size() == 0) {
+                throw new ServiceException("请选择一张元素表进行关联");
+            }
+            for (String tableId : tableIds) {
+                //获取当前表信息
+                WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getId, tableId));
+
+                //获取表单下的元素信息
+                List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda()
+                        .eq(WbsFormElement::getFId, tableId));
+                Collections.reverse(wbsFormElements);
+                WbsFormElement firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
+
+                //去重,元素表中名称已存在的元素不添加
+                List<WbsFormElement> newList = formElementDTO.getElementList().stream().filter(a ->
+                        !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
+                ).collect(Collectors.toList());
+
+                //初始化eKey字段
+                int keyNumber = Integer.parseInt(firstWbsFormElement.getEKey().split("_")[1]);
+                final int[] keyNumber1 = {1};
+
+                newList.stream().forEach(wbsFormElementInfo -> {
+                    String key = "key_" + (keyNumber + keyNumber1[0]);
+
+                    //新增元素到当前表中
+                    wbsFormElementInfo.setEKey(key);
+                    wbsFormElementInfo.setId(SnowFlakeUtil.getId());
+                    wbsFormElementInfo.setFId(tableId);
+                    wbsFormElementInfo.setStatus(1);
 
-        WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>query().lambda()
-                .eq(WbsTree::getId, formElementDTO.getId()
-                ));
+                    baseMapper.insert(wbsFormElementInfo);
 
-        //取消旧关联
-        List<WbsTree> wbsTreeList = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
-                .eq(WbsTree::getParentId, wbsTree.getParentId()
-                ));
+                    //追加字段到实体表中
+                    wbsTreeMapper.alterTableFiled(wbsTree.getInitTableName(), key,
+                            getInitTableFiledType(wbsFormElementInfo.getEType()),
+                            Integer.valueOf(setDefaultElementLength(wbsFormElementInfo.getEType())));
 
-        //存在2张表以上时取消关联旧表
-        if (wbsTreeList.size() > 1) {
-            wbsTreeMapper.updateByParentId(wbsTree.getParentId(), formElementDTO.getId());
+                    keyNumber1[0]++;
+
+                });
+
+                //修改关联信息
+                wbsTree.setIsLinkTable(2);
+                wbsTreeMapper.updateById(wbsTree);
+            }
         }
 
-        //新关联
-        wbsTree.setIsLinkTable(2);
-        int i = wbsTreeMapper.updateById(wbsTree);
-        return i > 0;
+        return true;
 
     }
 
-    private R saveFormElement(FormElementDTO formElementDTO) {
+    @Override
+    public boolean cancelRelation(String id) {
+        return wbsTreeMapper.cancelRelation(id);
+    }
+
+    private R saveFormElement(FormElementDTO2 formElementDTO) {
         String deptName = formElementDTO.getDeptName();
         if (deptName.length() > 100 || deptName.length() < 1) {
             throw new ServiceException("表名长度错误,输入范围1-100个字符长度");
@@ -445,7 +450,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         }
         //初始化
         Long id = SnowFlakeUtil.getId();
-        String newTableName = "m_" + DateUtil.time() + "_" + id.toString();
+        String newTableName = "m_" + DateUtil.time() + "_" + id;
         formElementDTO.setInitTableName(newTableName);
 
         //创建元素表
@@ -521,7 +526,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
 
     }
 
-    private boolean submit2(FormElementDTO dept) {
+    private boolean submit2(FormElementDTO2 dept) {
         if (Func.isEmpty(dept.getParentId())) {
             dept.setTenantId(AuthUtil.getTenantId());
             dept.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));