Procházet zdrojové kódy

元素同步问题

liuyc před 3 roky
rodič
revize
15e4b7a735

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

@@ -58,7 +58,7 @@ public class WbsFormElementController extends BladeController {
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "新增", notes = "传入wbsFormElement")
     public R save(@Valid @RequestBody WbsFormElementDTO wbsFormElement) {
-        return wbsFormElementService.saveAndSyn(wbsFormElement, wbsFormElement.getInitTableName());
+        return R.status(wbsFormElementService.saveAndSyn(wbsFormElement, wbsFormElement.getInitTableName()));
     }
 
 
@@ -198,8 +198,8 @@ public class WbsFormElementController extends BladeController {
     @ApiOperationSupport(order = 12)
     @ApiOperation(value = "元素识别取消关联公有wbs表", notes = "传入表id、清表id")
     @RequestMapping(value = "/cancel-relation", method = RequestMethod.GET)
-    public R cancelRelation(String id,String excelTabId) {
-        if (wbsFormElementService.cancelRelation(id,excelTabId)) {
+    public R cancelRelation(String id, String excelTabId) {
+        if (wbsFormElementService.cancelRelation(id, excelTabId)) {
             return R.success("取消成功");
         }
         return R.fail(200, "操作失败");
@@ -212,7 +212,7 @@ public class WbsFormElementController extends BladeController {
     @ApiOperation(value = "元素识别关联公共WBS模板-查询节点下已关联的所有表单", notes = "传入节点id、清表id")
     @RequestMapping(value = "/getNodeTables", method = RequestMethod.GET)
     public R<List<WbsNodeTableVO>> searchNodeTables(String nodeId, String excelTabId) {
-        List<WbsNodeTableVO> list = wbsFormElementService.searchNodeTables(nodeId,excelTabId);
+        List<WbsNodeTableVO> list = wbsFormElementService.searchNodeTables(nodeId, excelTabId);
         if (list.size() > 0) {
             return R.data(list, "查询成功");
         }

+ 3 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -233,23 +233,10 @@ public class WbsTreeController extends BladeController {
         for (WbsFormElement wbsFormElement : wbsFormElementList) {
             wbsFormElement.setStatus(1);
         }
-        boolean b = wbsFormElementService.updateBatchById(wbsFormElementList);
-        if (b) {
-            String s = wbsFormElementService.updateAndSyn(wbsFormElementList, initTableName);
-            switch (s) {
-                case "1":
-                    return R.fail("请输入正确字符串长度,范围为10-1000之间");
-                case "2":
-                    return R.fail("请输入正确整数长度,范围为10-255之间");
-                case "3":
-                    return R.fail("请输入正确小数长度,范围为10-65之间");
-                case "0":
-                    return R.success("修改成功");
-                default:
-                    return R.success("修改失败");
-            }
+        if (wbsFormElementService.updateBatchById(wbsFormElementList)) {
+            return R.status(wbsFormElementService.updateAndSyn(wbsFormElementList, initTableName));
         }
-        return R.fail("修改失败");
+        return R.fail(200,"修改失败");
     }
 
 

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

@@ -55,5 +55,8 @@ public interface WbsFormElementMapper extends BaseMapper<WbsFormElement> {
 
     Integer showShowTabLike(@Param("wbsTree") WbsTree wbsTree);
 
+    int assertFiledExist(String initTableName, String eKey);
+
+    String selectFiledType(String initTableName, String eKey);
 
 }

+ 9 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsFormElementMapper.xml

@@ -108,7 +108,7 @@
         where is_deleted = 0
     </select>
     <select id="judgeFiled" resultType="Integer">
-        select count(*)
+        select count(1)
         from information_schema.columns
         where table_name = &quot;${tableName}&quot;
           and column_name = &quot;${eKey}&quot;
@@ -153,4 +153,12 @@
         select count(*) from information_schema.TABLES where table_name = #{wbsTree.initTableName}
     </select>
 
+    <select id="assertFiledExist" resultType="java.lang.Integer">
+        SELECT count(1) FROM ${initTableName} WHERE ${eKey} is not null
+    </select>
+
+    <select id="selectFiledType" resultType="java.lang.String">
+        SELECT data_type FROM information_schema.columns WHERE table_name=#{initTableName} AND column_name = #{eKey}
+    </select>
+
 </mapper>

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

@@ -30,11 +30,11 @@ public interface IWbsFormElementService extends BaseService<WbsFormElement> {
 
     void importElement(List<WbsFormElementExcel> data, Boolean isCovered, String tableId);
 
-    R saveAndSyn(WbsFormElement wbsFormElement, String tableName);
+    boolean saveAndSyn(WbsFormElement wbsFormElement, String tableName);
 
     boolean deleteAndSyn(String ids, String elementName, String tableName);
 
-    String updateAndSyn(List<WbsFormElement> wbsFormElementList, String initTableName);
+    boolean updateAndSyn(List<WbsFormElement> wbsFormElementList, String initTableName);
 
     List<WbsFormElementDTO2> findWbsTreeTableSameLevel(String parentId);
 

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

@@ -158,13 +158,10 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
     }
 
     @Override
-    public R saveAndSyn(WbsFormElement wbsFormElement, String tableName) {
-        //新增元素字段
-        //查询当前元素表中元素的最后一个key_?值
+    public boolean saveAndSyn(WbsFormElement wbsFormElement, String tableName) {
         try {
-            QueryWrapper<WbsFormElement> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("f_id", wbsFormElement.getFId());
-            List<WbsFormElement> wbsFormElements = baseMapper.selectList(queryWrapper);
+            //获取当前表单下所有元素
+            List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda().eq(WbsFormElement::getFId, wbsFormElement.getFId()));
             String substring = "";
             List<String> eKeyNum = new ArrayList<>();
             if (wbsFormElements.size() > 0) {
@@ -187,104 +184,138 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
             String newName = wbsFormElement.getEKey();
             wbsFormElement.setStatus(1);
 
-            //同步
             StringBuilder sbr1 = new StringBuilder();
-            String fieldType = judgeDataType(wbsFormElement.getEType());
+            String fieldType = getInitTableFiledType(wbsFormElement.getEType());
 
             if ("varchar".equals(fieldType)) {
                 if (wbsFormElement.getELength() > 1000 || wbsFormElement.getELength() < 10) {
-                    return R.fail("请输入正确的字符串长度,范围为10-1000");
+                    throw new ServiceException("请输入正确的长度,范围为10-1000");
                 } else {
+                    //新增
                     baseMapper.insert(wbsFormElement);
 
+                    //同步
                     sbr1.append(" ").append(fieldType).append("(").append(wbsFormElement.getELength()).append(")");
                     String sql = newName + " " + sbr1;
                     baseMapper.alterAddFiled(sql, tableName);
-                    return R.data(wbsFormElement, "操作成功");
+                    return true;
                 }
+
             } else if ("bigint".equals(fieldType)) {
                 if (wbsFormElement.getELength() > 255 || wbsFormElement.getELength() < 10) {
-                    return R.fail("请输入正确的整数长度,范围为10-255");
+                    throw new ServiceException("请输入正确的长度,范围为10-255");
                 } else {
+                    //新增
                     baseMapper.insert(wbsFormElement);
+
+                    //同步
                     sbr1.append(" ").append(fieldType).append("(").append(wbsFormElement.getELength()).append(")");
                     String sql = newName + " " + sbr1;
                     baseMapper.alterAddFiled(sql, tableName);
-                    return R.data(wbsFormElement, "操作成功");
+                    return true;
                 }
+
             } else if ("decimal".equals(fieldType)) {
                 if (wbsFormElement.getELength() > 65 || wbsFormElement.getELength() < 10) {
-                    return R.fail("请输入正确的小数长度,范围为10-65");
+                    throw new ServiceException("请输入正确的长度,范围为10-65");
                 } else {
+                    //新增
                     baseMapper.insert(wbsFormElement);
                     sbr1.append(" ").append(fieldType).append("(").append(wbsFormElement.getELength()).append(")");
                     String sql = newName + " " + sbr1;
+
+                    //同步
                     baseMapper.alterAddFiled(sql, tableName);
-                    return R.data(wbsFormElement, "操作成功");
+                    return true;
                 }
             } else if ("datetime".equals(fieldType)) {
-                baseMapper.insert(wbsFormElement);
-                sbr1.append(" ").append(fieldType).append("(").append(0).append(")");
-                String sql = newName + " " + sbr1;
-                baseMapper.alterAddFiled(sql, tableName);
-                return R.data(wbsFormElement, "操作成功");
+                if (wbsFormElement.getELength() != 0) {
+                    throw new ServiceException("请输入正确的长度,范围为0");
+                } else {
+                    //新增
+                    baseMapper.insert(wbsFormElement);
+                    sbr1.append(" ").append(fieldType).append("(").append(0).append(")");
+                    String sql = newName + " " + sbr1;
+
+                    //同步
+                    baseMapper.alterAddFiled(sql, tableName);
+                    return true;
+                }
             }
 
         } catch (Exception e) {
             baseMapper.deleteElement(wbsFormElement);
             throw new ServiceException("未获取到对应实体表信息,新增失败");
         }
-
-        return R.fail("操作失败");
+        return false;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean deleteAndSyn(String ids, String eKey, String tableName) {
-        deleteLogic(Func.toLongList(ids));
+        //判断字段是否存在实体表中
         int row = baseMapper.judgeFiled(eKey, tableName);
+
         if (row > 0) {
+            //是否存在填报数据
+            int row1 = baseMapper.assertFiledExist(tableName, eKey);
+            if (row1 > 0) {
+                throw new ServiceException("当前元素字段存在填报数据,删除失败");
+            }
+
+            //删除实体表字段
             baseMapper.deleteTableFiled(eKey, tableName);
         }
+
+        //逻辑删除元素字段
+        deleteLogic(Func.toLongList(ids));
+
         return true;
     }
 
     @Override
-    public String updateAndSyn(List<WbsFormElement> wbsFormElementList, String initTableName) {
-        QueryWrapper<WbsFormElement> queryWrapper = new QueryWrapper<>();
+    public boolean updateAndSyn(List<WbsFormElement> wbsFormElementList, String initTableName) {
         String fId = "";
         for (WbsFormElement wbsFormElement : wbsFormElementList) {
             fId = wbsFormElement.getFId();
+            break;
         }
+        //当前元素表下所有元素信息
+        List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda().eq(WbsFormElement::getFId, fId));
 
-        queryWrapper.eq("f_id", fId);
-        List<WbsFormElement> wbsFormElements = baseMapper.selectList(queryWrapper);
         for (WbsFormElement wbsFormElement : wbsFormElements) {
             String eKey = wbsFormElement.getEKey();
             Integer eLength = wbsFormElement.getELength();
-            String eType = judgeDataType(wbsFormElement.getEType());
-
-            if (eType.equals("bigint") && (eLength > 255 || eLength < 10)) {  //整数
-                return "2";
-            } else if (eType.equals("varchar") && (eLength > 1000 || eLength < 10)) {  //字符串
-                return "1";
-            } else if (eType.equals("decimal") && (eLength > 65 || eLength < 10)) {  //小数
-                return "3";
+            String eType = getInitTableFiledType(wbsFormElement.getEType());
+
+            if (eType.equals("bigint") && (eLength > 255 || eLength < 10)) {
+                throw new ServiceException("请输入正确长度,范围为10-255之间");
+            } else if (eType.equals("varchar") && (eLength > 1000 || eLength < 10)) {
+                throw new ServiceException("请输入正确长度,范围为10-1000之间");
+            } else if (eType.equals("decimal") && (eLength > 65 || eLength < 10)) {
+                throw new ServiceException("请输入正确长度,范围为10-65之间");
             }
-            try {
-                baseMapper.updateFiledType(initTableName, eKey, eType, eLength);
-            } catch (Exception e) {
-                throw new ServiceException("未获取到对应实体表信息,修改失败");
+
+            //当前字段类型
+            String filedTypeOld = baseMapper.selectFiledType(initTableName, eKey);
+
+            if (!eType.equals(filedTypeOld)) {
+                //修改前判断,字段是否存在填报数据
+                int row = baseMapper.assertFiledExist(initTableName, eKey);
+                if (row > 0) {
+                    throw new ServiceException("选择修改的元素字段下存在填报数据,不允许修改字段类型");
+                }
             }
+            //修改
+            baseMapper.updateFiledType(initTableName, eKey, eType, eLength);
         }
 
-        return "0";
+        return true;
     }
 
     @Override
     public List<WbsFormElementDTO2> findWbsTreeTableSameLevel(String parentId) {
         return baseMapper.selectWbsTreeTableListByParentId(parentId);
-
     }
 
     @Override
@@ -299,7 +330,6 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
             number++;
         }
         return true;
-
     }
 
     @Override
@@ -311,17 +341,14 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
     @Override
     public void importElement2(List<WbsFormElementBatchExcel> data, Boolean isCovered, String tableId) {
         //TODO
-
     }
 
     @Override
     public WbsFormElement searchElementDetailByTableElementKey(String fId, String tableElementKey) {
         String[] s = tableElementKey.split("_");
-        /*WbsTree wbsTree = baseMapper.selectElementInTableByFid(fId);*/
         return baseMapper.selectOne(Wrappers.<WbsFormElement>query().lambda()
                 .eq(WbsFormElement::getFId, fId)
                 .eq(WbsFormElement::getEName, s[1]));
-
     }
 
     @Override
@@ -369,7 +396,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
             this.saveFormElement(formElementDTO);
 
         } else if (formElementDTO.getSubmitStatus() == 1) {
-            if (formElementDTO.getElementList().size() <=0 ){
+            if (formElementDTO.getElementList().size() <= 0) {
                 throw new ServiceException("请添加至少一个元素信息");
             }
             //关联-在已有元素表中新增元素,在实体表中追加字段
@@ -400,7 +427,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                         WbsFormElement firstWbsFormElement;
                         List<WbsFormElement> newList;
                         //存在元素
-                        if(wbsFormElements.size() > 0){
+                        if (wbsFormElements.size() > 0) {
                             Collections.reverse(wbsFormElements);
                             firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
 
@@ -409,7 +436,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                                     !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
                             ).collect(Collectors.toList());
 
-                        }else {
+                        } else {
                             //不存在元素
                             firstWbsFormElement = new WbsFormElement();
                             firstWbsFormElement.setEKey("key_0");
@@ -448,12 +475,10 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                             }
                             newKeyNumber++;
                         }
-
                     }
                 }
             }
         }
-
         return true;
     }
 
@@ -484,7 +509,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                 WbsFormElement firstWbsFormElement;
                 List<WbsFormElement> newList;
                 //存在元素
-                if(wbsFormElements.size() > 0){
+                if (wbsFormElements.size() > 0) {
                     Collections.reverse(wbsFormElements);
                     firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
 
@@ -493,7 +518,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                             !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
                     ).collect(Collectors.toList());
 
-                }else {
+                } else {
                     //不存在元素
                     firstWbsFormElement = new WbsFormElement();
                     firstWbsFormElement.setEKey("key_0");
@@ -545,7 +570,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         if (nodeIds.size() <= 0) {
             throw new ServiceException("请至少选择一个节点进行新增操作");
         } else {
-            if (formElementDTO.getElementList().size() <=0 ){
+            if (formElementDTO.getElementList().size() <= 0) {
                 throw new ServiceException("请添加至少一个元素信息");
             }
             for (String nodeId : nodeIds) {