liuyc 3 anni fa
parent
commit
6263082782

+ 24 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsInfoController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.manager.controller;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
@@ -30,6 +31,9 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.WbsInfoDTO;
 import org.springblade.manager.entity.WbsInfo;
 import org.springblade.manager.entity.WbsTree;
+import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.mapper.WbsTreePrivateMapper;
+import org.springblade.manager.service.IWbsTreePrivateService;
 import org.springblade.manager.service.IWbsTreeService;
 import org.springblade.manager.vo.WbsInfoVO;
 import org.springframework.transaction.annotation.Transactional;
@@ -56,6 +60,7 @@ public class WbsInfoController extends BladeController {
 
     private final IWbsInfoService wbsInfoService;
     private final IWbsTreeService wbsTreeService;
+    private final WbsTreePrivateMapper wbsTreePrivateMapper;
 
     /**
      * 详情
@@ -142,12 +147,29 @@ public class WbsInfoController extends BladeController {
     @PostMapping("/remove")
     @ApiOperationSupport(order = 7)
     @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    @Transactional(rollbackFor = Exception.class)
     public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
         List<WbsTree> list = wbsTreeService.findByWbsTreeNode(ids);
         if (list.size() > 0) {
-            return R.fail("请先删除Wbs树下的节点");
+            return R.fail("当前模板根节点下有子节点,删除失败");
+        }
+        List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query()
+                .lambda()
+                .eq(WbsTreePrivate::getWbsId, ids)
+                .eq(WbsTreePrivate::getStatus, 1)
+                .eq(WbsTreePrivate::getIsDeleted, 0));
+        if (wbsTreePrivates.size() > 0) {
+            return R.fail("当前模板已被项目引用,删除失败");
+        }
+        boolean b = wbsInfoService.deleteLogic(Func.toLongList(ids));
+        if (b) {
+            //删除wbsTree根节点
+            int row = wbsTreeService.deleteLogicByWbsId(ids);
+            if (row > 0) {
+                return R.success("删除成功");
+            }
         }
-        return R.status(wbsInfoService.deleteLogic(Func.toLongList(ids)));
+        return R.fail("删除失败");
     }
 
     /**

+ 30 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -18,6 +18,7 @@ package org.springblade.manager.controller;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
@@ -37,8 +38,10 @@ import org.springblade.manager.dto.WbsTreeDTO;
 import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.excel.WbsExcelUtil;
 import org.springblade.manager.excel.WbsTreeExcel;
+import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.IWbsFormElementService;
 import org.springblade.manager.vo.WbsNodeTableVO;
 import org.springblade.manager.vo.WbsTreeVO;
@@ -74,6 +77,7 @@ public class WbsTreeController extends BladeController {
 
     private final IWbsTreeService wbsTreeService;
     private final IWbsFormElementService wbsFormElementService;
+    private final WbsTreePrivateMapper wbsTreePrivateMapper;
 
     /**
      * 详情
@@ -152,9 +156,22 @@ public class WbsTreeController extends BladeController {
      */
     @PostMapping("/remove")
     @ApiOperationSupport(order = 5)
-    @ApiOperation(value = "逻辑删除", notes = "传入ids")
-    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        return R.status(wbsTreeService.deleteLogic(Func.toLongList(ids)));
+    @ApiOperation(value = "逻辑删除", notes = "传入节点id")
+    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String id) {
+        //是否存在子节点、表单
+        List<WbsTree> wbsTreeList = wbsTreeService.selectByWbsId(id);
+        if (wbsTreeList.size() > 0) {
+            return R.fail("当前节点下存在子节点或表单,删除失败");
+        }
+        //是否引用
+        List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                .eq(WbsTreePrivate::getStatus, 1)
+                .eq(WbsTreePrivate::getId, id)
+        );
+        if (wbsTreePrivates.size() > 0) {
+            return R.fail("当前节点已被项目引用,删除失败");
+        }
+        return R.status(wbsTreeService.deleteLogic(Func.toLongList(id)));
     }
 
 
@@ -181,10 +198,17 @@ public class WbsTreeController extends BladeController {
     @ApiImplicitParam(name = "id", value = "表单id", required = true)
     public R removeTableById(@RequestParam("id") String id) {
         if (StringUtils.isNotEmpty(id)) {
-            // 先查询表单下是否有元素,有元素则无法删除
+            //否有元素
             List<WbsFormElement> wbsFormElements = wbsTreeService.selectFormElements(id);
             if (wbsFormElements.size() > 0) {
-                return R.fail("删除失败,请先移除表单中的元素!");
+                return R.fail("删除失败,请先移除表单中的元素");
+            }
+            //是否引用
+            List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                    .eq(WbsTreePrivate::getStatus, 1)
+                    .eq(WbsTreePrivate::getId, id));
+            if (wbsTreePrivates.size() > 0) {
+                return R.fail("该表单已被项目引用,删除失败");
             }
             //删除表单
             boolean restul = wbsTreeService.removeTableById(id);
@@ -278,7 +302,7 @@ public class WbsTreeController extends BladeController {
         Long parentId = wbsTreeFu.getParentId();
         WbsTree wbsTree1 = wbsTreeService.getById(parentId);
         if (wbsTree1.getProjectNodeId().equals(parentId)) {
-            /*覆盖*/
+            //覆盖
             wbsTreeService.deleteBatchByProjectNodeId(wbsTree1.getProjectNodeId());
             String result = wbsTreeService.importWbsTree(excelFile, wbsTreeFu, wbsTree1);
             if (result.equals("1")) {

+ 51 - 12
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -1,10 +1,8 @@
 package org.springblade.manager.controller;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.cache.utils.CacheUtil;
@@ -16,7 +14,10 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.entity.WbsTree;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.mapper.WbsTreeContractMapper;
+import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.IWbsTreePrivateService;
 import org.springblade.manager.vo.WbsNodeTableVO;
 import org.springblade.manager.vo.WbsTreePrivateVO;
@@ -40,12 +41,50 @@ import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
 public class WbsTreePrivateController extends BladeController {
 
     private final IWbsTreePrivateService wbsTreePrivateService;
+    private final WbsTreeContractMapper wbsTreeContractMapper;
+    private final WbsTreePrivateMapper wbsTreePrivateMapper;
+
+    /**
+     * 私有库节点逻辑删除
+     */
+    @PostMapping("/remove")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "私有库节点逻辑删除", notes = "传入节点pKeyId")
+    public R remove(@ApiParam(value = "主键id", required = true) @RequestParam String pKeyId) {
+        //是否存在子节点、表单
+        WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                .eq(WbsTreePrivate::getPKeyId, pKeyId)
+                .eq(WbsTreePrivate::getStatus, 1));
+        List<WbsTreePrivate> wbsTreePrivate1 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                .eq(WbsTreePrivate::getParentId, wbsTreePrivate.getId())
+                .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
+                .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
+                .eq(WbsTreePrivate::getStatus, 1));
+        if (wbsTreePrivate1.size() > 0) {
+            return R.fail("当前节点下存在子节点或表单,删除失败");
+        }
+        //是否被合同段引用
+        List<WbsTreeContract> wbsTreeContracts = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
+                .eq(WbsTreeContract::getStatus, 1)
+                .eq(WbsTreeContract::getId, wbsTreePrivate.getId())
+                .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())
+                .eq(WbsTreeContract::getWbsId, wbsTreePrivate.getWbsId())
+        );
+        if (wbsTreeContracts.size() > 0) {
+            return R.fail("当前节点已被项目合同段引用,删除失败");
+        }
+        if (wbsTreePrivateService.deleteLogicBypKeyId(pKeyId) > 0) {
+            return R.success("删除成功");
+        }
+        return R.fail("删除失败");
+    }
+
 
     /**
      * wbs私有库新增节点接口 同步合同段wbs库
      */
     @PostMapping("/submit")
-    @ApiOperationSupport(order = 1)
+    @ApiOperationSupport(order = 2)
     @ApiOperation(value = "新增或修改节点", notes = "WbsTreePrivate")
     public R submit(@Valid @RequestBody WbsTreePrivate wbsTreePrivate) {
         if (wbsTreePrivateService.submit(wbsTreePrivate)) {
@@ -61,7 +100,7 @@ public class WbsTreePrivateController extends BladeController {
      * 查询当前节点下所有表单(根据节点ID查询当前表单)
      */
     @GetMapping("/findNodeTableByCondition")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 3)
     @ApiOperation(value = "查询当前节点下所有元素表", notes = "传入父节点id、wbsId、projectId")
     public R<List<WbsNodeTableVO>> findNodeTableByCondition(@RequestParam("parentId") String parentId,
                                                             @RequestParam("wbsId") String wbsId,
@@ -75,7 +114,7 @@ public class WbsTreePrivateController extends BladeController {
 
 
     @GetMapping("/removeTableByCondition")
-    @ApiOperationSupport(order = 3)
+    @ApiOperationSupport(order = 4)
     @ApiOperation(value = "删除节点下的元素表", notes = "传入表单id、wbsId、projectId")
     public R removeTableByCondition(@RequestParam("id") String id,
                                     @RequestParam("wbsId") String wbsId,
@@ -93,7 +132,7 @@ public class WbsTreePrivateController extends BladeController {
      * wbs私有树懒加载获取项目私有节点树形结构
      */
     @GetMapping("/lazy-tree")
-    @ApiOperationSupport(order = 2)
+    @ApiOperationSupport(order = 5)
     @ApiOperation(value = "项目级懒加载节点树形结构", notes = "传入wbsId,parentId,,项目id,请求头token")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "wbsId", value = "wbsId", required = true),
@@ -113,7 +152,7 @@ public class WbsTreePrivateController extends BladeController {
      */
 
     @GetMapping("/detail")
-    @ApiOperationSupport(order = 1)
+    @ApiOperationSupport(order = 6)
     @ApiOperation(value = "详情", notes = "传入主键id,wbsId,项目id,请求头token")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "id", value = "节点id", required = true),
@@ -132,7 +171,7 @@ public class WbsTreePrivateController extends BladeController {
     /**
      * 查询当前节点所有同级节点
      */
-    @ApiOperationSupport(order = 14)
+    @ApiOperationSupport(order = 7)
     @ApiOperation(value = "查询当前节点所有同级节点", notes = "传入项目id、当前节点parentId")
     @RequestMapping(value = "/findWbsTreePrivateSameLevel", method = RequestMethod.GET)
     public R<List<WbsTreePrivateDTO2>> findWbsTreePrivateSameLevel(@RequestParam("projectId") String projectId,
@@ -145,7 +184,7 @@ public class WbsTreePrivateController extends BladeController {
     /**
      * wbs树节点手动排序
      */
-    @ApiOperationSupport(order = 15)
+    @ApiOperationSupport(order = 8)
     @ApiOperation(value = "wbs私有树节点手动排序", notes = "WbsTreeDTO2集合,pKeyId=节点pKeyId")
     @RequestMapping(value = "/wbsTreePrivateSort", method = RequestMethod.POST)
     public R wbsTreePrivateSort(@RequestBody List<WbsTreePrivateDTO2> wbsTreeDTO) {
@@ -157,7 +196,7 @@ public class WbsTreePrivateController extends BladeController {
     /**
      * wbs树节点下表单手动排序
      */
-    @ApiOperationSupport(order = 15)
+    @ApiOperationSupport(order = 9)
     @ApiOperation(value = "wbs私有树表单手动排序", notes = "WbsTreeDTO2集合,pKeyId=表单pKeyId")
     @RequestMapping(value = "/wbsTreePrivateTableSort", method = RequestMethod.POST)
     public R wbsTreePrivateTableSort(@RequestBody List<WbsTreePrivateDTO2> wbsTreeDTO) {

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

@@ -16,6 +16,7 @@
  */
 package org.springblade.manager.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
@@ -124,4 +125,6 @@ public interface WbsTreeMapper extends BaseMapper<WbsTree> {
     List<WbsTreeDTO2> selectWbsTreeListByParentId(String parentId);
 
     void updateSortById(String id, Integer sort);
+
+    int deleteLogicByWbsId(String ids);
 }

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

@@ -142,6 +142,10 @@
         delete from m_wbs_tree where project_node_id = #{projectNodeId} and id &lt;&gt; #{projectNodeId}
     </delete>
 
+    <update id="deleteLogicByWbsId">
+        update m_wbs_tree set is_deleted = 1 where wbs_id = #{ids} and status = 1
+    </update>
+
     <select id="selectWbsTreePage" resultMap="wbsTreeResultMap">
         select * from m_wbs_tree where is_deleted = 0
     </select>

+ 3 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java

@@ -19,7 +19,7 @@ import java.util.List;
  * @since 2022-05-24
  */
 public interface WbsTreePrivateMapper extends BaseMapper<WbsTreePrivate> {
-    List<WbsTreePrivate> selectAll();
+    List<WbsTreePrivate> selectAll(Integer wbsType);
 
     /**
      * 获取树形节点
@@ -78,4 +78,6 @@ public interface WbsTreePrivateMapper extends BaseMapper<WbsTreePrivate> {
     void updateSortById(Long pKeyId, Integer sort);
 
     void updateSortById2(Long pKeyId, Integer sort);
+
+    int updateIsDeletedByPKeyId(String pKeyId);
 }

+ 15 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -158,6 +158,14 @@
         AND is_deleted = 0
     </update>
 
+    <update id="updateIsDeletedByPKeyId">
+        UPDATE m_wbs_tree_private
+        SET is_deleted = 1
+        WHERE p_key_id = #{pKeyId}
+        AND status = 1
+        AND is_deleted = 0
+    </update>
+
 
     <select id="lazyTree" resultMap="treeNodeResultMap">
         SELECT
@@ -201,13 +209,16 @@
         wtp.project_id,
         ( SELECT project_name FROM m_project_info pi WHERE wtp.project_id = pi.id ) AS project_name
         FROM
-            m_wbs_tree_private AS wtp
+        m_wbs_tree_private AS wtp
         WHERE
-            is_deleted = 0
+        is_deleted = 0
         AND STATUS = 1
         AND parent_id = 0
-            GROUP BY
-            project_id
+        <if test="wbsType != null and wbsType != ''">
+            AND wbs_type = #{wbsType}
+        </if>
+        GROUP BY
+        project_id
     </select>
 
     <select id="tree" resultMap="treeNodeResultMap">

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java

@@ -32,4 +32,6 @@ public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
 
     boolean wbsTreePrivateTableSort(List<WbsTreePrivateDTO2> wbsTreeDTO);
 
+    int deleteLogicBypKeyId(String pKeyId);
+
 }

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java

@@ -109,4 +109,8 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
     List<WbsTreeDTO2> findWbsTreeSameLevel(String parentId);
 
     boolean wbsTreeSort(List<WbsTreeDTO2> wbsTreeList);
+
+    int deleteLogicByWbsId(String ids);
+
+    List<WbsTree> selectByWbsId(String id);
 }

+ 5 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -1,23 +1,15 @@
 package org.springblade.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
-import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
-import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
-import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
-import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.WbsInfo;
-import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreePrivate;
 
 import org.springblade.manager.mapper.ContractInfoMapper;
@@ -143,6 +135,11 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return true;
     }
 
+    @Override
+    public int deleteLogicBypKeyId(String pKeyId) {
+        return baseMapper.updateIsDeletedByPKeyId(pKeyId);
+    }
+
 
     public List<WbsTreePrivate> findAllNodeList(String wbsTreeIds, String projectId, String wbsId) {
         String[] ids = wbsTreeIds.split(",");

+ 82 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -17,6 +17,7 @@
 package org.springblade.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import net.sourceforge.pinyin4j.PinyinHelper;
@@ -37,7 +38,6 @@ 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.WbsFormElementDTO;
 import org.springblade.manager.dto.WbsTreeContractDTO;
 import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.*;
@@ -276,9 +276,11 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
     @Override
     public List<WbsTree> findByWbsTreeNode(String ids) {
-        QueryWrapper<WbsTree> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("wbs_id", ids);
-        return baseMapper.selectList(queryWrapper);
+        return baseMapper.selectList(Wrappers.<WbsTree>query().lambda()
+                .eq(WbsTree::getWbsId, ids)
+                .ne(WbsTree::getParentId, 0)
+                .eq(WbsTree::getStatus, 1)
+                .eq(WbsTree::getIsDeleted, 0));
     }
 
     @Override
@@ -305,6 +307,19 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return true;
     }
 
+    @Override
+    public int deleteLogicByWbsId(String ids) {
+        return baseMapper.deleteLogicByWbsId(ids);
+    }
+
+    @Override
+    public List<WbsTree> selectByWbsId(String id) {
+        return baseMapper.selectList(Wrappers.<WbsTree>query().lambda()
+                .eq(WbsTree::getParentId, id)
+                .eq(WbsTree::getStatus, 1)
+        );
+    }
+
 
     private boolean updateData(String ancestors, Long id) {
         Integer row = baseMapper.updateById2(ancestors, id);
@@ -478,7 +493,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         List<WbsInfo> wbsInfos = wbsInfoMapper.selectAll(type);
         wbsTreeAllListVO.setWbsInfos(wbsInfos);
         //查询项目私有树 默认type=1质检
-        List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectAll();
+        List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectAll(type);
         wbsTreeAllListVO.setWbsTreePrivates(wbsTreePrivates);
         return wbsTreeAllListVO;
     }
@@ -500,9 +515,23 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         if (StringUtils.isEmpty(filedName) || StringUtils.isEmpty(filedType) || StringUtils.isEmpty(filedLength)) {
             return R.fail("操作失败,请完整填写元素参数");
         }
+
+        String deptName = formElementDTO.getDeptName();
+        if (deptName.length() > 50 || deptName.length() < 1) {
+            throw new ServiceException("表名长度错误,输入范围1-50个字符长度");
+        }
+        if (deptName.contains(".")) {
+            deptName = deptName.replace(".", "");
+        }
+        if (deptName.contains(" ")) {
+            deptName = deptName.replace(" ", "");
+        }
+        if (deptName.contains("_")) {
+            deptName = deptName.replace("_", "");
+        }
         //初始化表名
-        String realName = getPinyin(formElementDTO.getDeptName(), "");
-        String newTableName = "m_wbs_form_" + DateUtil.time() + "_" + realName;
+        String realName = getFirstSpell(deptName);
+        String newTableName = "m_wbs_f" + DateUtil.time().substring(8, 14) + "_" + realName;
         formElementDTO.setInitTableName(newTableName);
 
         //创建元素表
@@ -510,6 +539,15 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         List<WbsFormElement> elementList = formElementDTO.getElementList();
         int i = 1;
         for (WbsFormElement wbsFormElement : elementList) {
+            if (wbsFormElement.getEType() == 1 && (wbsFormElement.getELength() > 1000 || wbsFormElement.getELength() < 10)) {
+                throw new ServiceException("请输入正确的字符串长度,范围为10-1000");
+            }
+            if (wbsFormElement.getEType() == 2 && (wbsFormElement.getELength() > 255 || wbsFormElement.getELength() < 10)) {
+                throw new ServiceException("请输入正确的整数长度,范围为10-255");
+            }
+            if (wbsFormElement.getEType() == 3 && (wbsFormElement.getELength() > 65 || wbsFormElement.getELength() < 10)) {
+                throw new ServiceException("请输入正确的小数长度,范围为10-65");
+            }
             //当前元素表中元素对应实体表唯一key值、fId
             wbsFormElement.setEKey("key_" + i++);
             wbsFormElement.setFId(String.valueOf(formElementDTO.getId()));
@@ -524,11 +562,47 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         if (b1 && b2 && b3) {
             return R.data(formElementDTO, "新增表单、元素、初始化实体表成功");
         } else {
-            throw new RuntimeException("操作失败");
+            throw new ServiceException("操作失败");
         }
     }
 
 
+    /**
+     * 获取汉字串拼音首字母,英文字符不变
+     *
+     * @param chinese 汉字串
+     * @return 汉语拼音首字母
+     */
+    public static String getFirstSpell(String chinese) {
+        StringBuffer pybf = new StringBuffer();
+        char[] arr = chinese.toCharArray();
+        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
+        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+        for (int i = 0; i < arr.length; i++) {
+            if (arr[i] > 128) {
+                try {
+                    String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
+                    if (temp != null) {
+                        pybf.append(temp[0].charAt(0));
+                    }
+                } catch (BadHanyuPinyinOutputFormatCombination e) {
+                    e.printStackTrace();
+                }
+            } else {
+                pybf.append(arr[i]);
+            }
+        }
+        return pybf.toString().replaceAll("\\W", "").trim();
+    }
+
+    /**
+     * 汉字转拼音,英文字符不变
+     *
+     * @param text
+     * @param separator
+     * @return
+     */
     public static String getPinyin(String text, String separator) {
         //text 文本, separator 转换后添加的分隔符
         char[] chars = text.toCharArray();