Browse Source

修复了一些BUG

liuyc 3 years ago
parent
commit
83f19da2fc

+ 10 - 3
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ExcelInWbsTreeAndElementDTO.java

@@ -1,19 +1,23 @@
 package org.springblade.manager.dto;
 
 import lombok.Data;
+import org.springblade.manager.entity.WbsFormElement;
+import org.w3c.dom.stylesheets.LinkStyle;
 
 import java.io.Serializable;
+import java.util.List;
 
 @Data
 public class ExcelInWbsTreeAndElementDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
 
     /**
-     * 节点Id
+     * 表单id-主键
      */
     private String id;
 
     /**
-     * 表id
+     * 表
      */
     private String deptName;
 
@@ -23,6 +27,9 @@ public class ExcelInWbsTreeAndElementDTO implements Serializable {
     private String initTableName;
 
     /**
-     * 元素List
+     * 元素List集合
      */
+    private List<WbsFormElement> elementList;
+
+
 }

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

@@ -231,9 +231,8 @@ public class WbsFormElementController extends BladeController {
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "提交清表关联公有Wbs树并创建元素", notes = "节点id、表名、元素DTO")
     @RequestMapping(value = "/submitExcelRelationWbsTreeAndElement", method = RequestMethod.POST)
-    public R submitExcelRelationWbsTreeAndElement(String fId, String tableElementKey) {
-        boolean b = wbsFormElementService.submitExcelRelationWbsTreeAndElement(fId, tableElementKey);
-        return R.status(b);
+    public R submitExcelRelationWbsTreeAndElement(@RequestBody FormElementDTO formElementDTO) {
+        return R.status(wbsFormElementService.submitExcelRelationWbsTreeAndElement(formElementDTO));
     }
 
 

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml

@@ -180,6 +180,7 @@
         AND STATUS = 1
         /* major_data_type = 5是日志类型,日志类型不需要直接在划分树上体现 */
         AND (major_data_type != 5 or major_data_type is null)
+        AND type = 1
         <if test="wbsId!=null and wbsId!=''">
             and wbs_id = #{wbsId}
         </if>

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

@@ -254,6 +254,8 @@
             wt.table_owner as tableOwner,
             wt.is_link_table,
             wt.init_table_name as "initTableName",
+            wt.parent_id AS "parentId",
+            wt.wbs_id AS "wbsId",
             (SELECT count(*) FROM m_wbs_form_element AS wfe WHERE wfe.f_id=wt.id and wfe.is_deleted = 0) AS elementTotal
         FROM
             m_wbs_tree AS wt

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

@@ -21,14 +21,12 @@ 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.WbsFormElementDTO;
 import org.springblade.manager.dto.WbsFormElementDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.excel.WbsFormElementBatchExcel;
 import org.springblade.manager.excel.WbsFormElementExcel;
 import org.springblade.manager.vo.WbsFormElementVO;
 import org.springblade.manager.vo.WbsFormElementVO2;
-import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -66,12 +64,12 @@ public interface IWbsFormElementService extends BaseService<WbsFormElement> {
 
     void importElement2(List<WbsFormElementBatchExcel> data, Boolean isCovered, String tableId);
 
-    WbsFormElement searchElementDetailByTableElementKey(String fId,String tableElementKey);
+    WbsFormElement searchElementDetailByTableElementKey(String fId, String tableElementKey);
 
     boolean syncDataFiled(String initTableName, List<WbsFormElement> listData);
 
     boolean submitBatch(WbsFormElementVO2 wbsFormElementVO2);
 
-    boolean submitExcelRelationWbsTreeAndElement(String fId, String tableElementKey);
+    boolean submitExcelRelationWbsTreeAndElement(FormElementDTO formElementDTO);
 
 }

+ 178 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -20,24 +20,41 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
 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.api.R;
+import org.springblade.core.tool.constant.BladeConstant;
+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.WbsFormElementDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.excel.WbsFormElementBatchExcel;
 import org.springblade.manager.excel.WbsFormElementExcel;
 import org.springblade.manager.mapper.WbsFormElementMapper;
+import org.springblade.manager.mapper.WbsTreeMapper;
 import org.springblade.manager.service.IWbsFormElementService;
+import org.springblade.manager.service.IWbsTreeService;
 import org.springblade.manager.vo.WbsFormElementVO;
 import org.springblade.manager.vo.WbsFormElementVO2;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * wbs表单元素 服务实现类
@@ -50,6 +67,7 @@ import java.util.List;
 public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMapper, WbsFormElement> implements IWbsFormElementService {
 
     private final WbsFormElementMapper wbsFormElementMapper;
+    private final WbsTreeMapper wbsTreeMapper;
 
 
     @Override
@@ -343,8 +361,143 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
     }
 
     @Override
-    public boolean submitExcelRelationWbsTreeAndElement(String fId, String tableElementKey) {
-        return false;
+    @Transactional(rollbackFor = Exception.class)
+    public boolean submitExcelRelationWbsTreeAndElement(FormElementDTO formElementDTO) {
+        //formElementDTO.getId() 当前表id
+        if (formElementDTO.getId() == 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());
+            //新增
+            newList.stream().forEach(wbsFormElementInfo -> {
+                String key = "key_" + (keyNumber + 1);
+                //新增元素到当前表中
+                wbsFormElementInfo.setEKey(key);
+                wbsFormElementInfo.setFId(String.valueOf(formElementDTO.getId()));
+                baseMapper.insert(wbsFormElementInfo);
+                //追加实体表字段
+                wbsTreeMapper.alterTableFiled(formElementDTO.getInitTableName(), key,
+                        getInitTableFiledType(wbsFormElementInfo.getEType()),
+                        Integer.valueOf(setDefaultElementLength(wbsFormElementInfo.getEType())));
+            });
+        }
+        return true;
+    }
+
+    private R saveFormElement(FormElementDTO formElementDTO) {
+        String deptName = formElementDTO.getDeptName();
+        if (deptName.length() > 100 || deptName.length() < 1) {
+            throw new ServiceException("表名长度错误,输入范围1-100个字符长度");
+        }
+        if (formElementDTO.getElementList().size() <= 0) {
+            return R.fail("操作失败,请先添加表单元素");
+        }
+        for (WbsFormElement wbsFormElement : formElementDTO.getElementList()) {
+            if (StringUtils.isEmpty(wbsFormElement.getEName()) ||
+                    StringUtils.isEmpty(String.valueOf(wbsFormElement.getEType()))) {
+                return R.fail("操作失败,请完整填写元素名称与类型参数");
+            }
+        }
+        //初始化表名
+        Long id = SnowFlakeUtil.getId();
+        String newTableName = "m_wbs_form_" + DateUtil.time() + "_" + id.toString();
+        formElementDTO.setInitTableName(newTableName);
+        //创建元素表
+        boolean b1 = submit2(formElementDTO);
+
+        List<WbsFormElement> elementList = formElementDTO.getElementList();
+        int i = 1;
+        for (WbsFormElement wbsFormElement : elementList) {
+            //当前元素表中元素对应实体表唯一key值、fId、元素默认长度
+            wbsFormElement.setEKey("key_" + i++);
+            wbsFormElement.setFId(String.valueOf(formElementDTO.getId()));
+            wbsFormElement.setELength(Integer.valueOf(setDefaultElementLength(wbsFormElement.getEType())));
+        }
+        //新增元素
+        boolean b2 = this.saveBatch(elementList);
+
+        //找到当前元素表中所有元素
+        List<WbsFormElement> list = this.selectElementListByFid(String.valueOf(formElementDTO.getId()));
+        //初始化实体表
+        Boolean b3 = this.initTable(list, newTableName);
+        if (b1 && b2 && b3) {
+            return R.data(formElementDTO, "新增表单、元素、初始化实体表成功");
+        } else {
+            throw new ServiceException("操作失败");
+        }
+    }
+
+    private static String getPinyin(String text, String separator) {
+        //text 文本, separator 转换后添加的分隔符
+        char[] chars = text.toCharArray();
+        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
+        // 设置大小写
+        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+        // 设置声调表示方法
+        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+        // 设置字母u表示方法
+        format.setVCharType(HanyuPinyinVCharType.WITH_V);
+        String[] s;
+        String rs = "";
+        try {
+            StringBuilder sb = new StringBuilder();
+            for (int i = 0; i < chars.length; i++) {
+                // 判断是否为汉字字符
+                if (String.valueOf(chars[i]).matches("[\\u4E00-\\u9FA5]+")) {
+                    s = PinyinHelper.toHanyuPinyinStringArray(chars[i], format);
+                    if (s != null) {
+                        sb.append(s[0]).append(separator);
+                        continue;
+                    }
+                }
+                sb.append(chars[i]);
+                if ((i + 1 >= chars.length) || String.valueOf(chars[i + 1]).matches("[\\u4E00-\\u9FA5]+")) {
+                    sb.append(separator);
+                }
+            }
+            rs = sb.substring(0, sb.length());
+        } catch (BadHanyuPinyinOutputFormatCombination e) {
+            e.printStackTrace();
+        }
+        return rs;
+    }
+
+    private boolean submit2(FormElementDTO dept) {
+        if (Func.isEmpty(dept.getParentId())) {
+            dept.setTenantId(AuthUtil.getTenantId());
+            dept.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+            dept.setCreateUser(AuthUtil.getUserId());
+            dept.setParentId(BladeConstant.TOP_PARENT_ID);
+            dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
+        }
+        if (dept.getParentId() > 0) {
+            WbsTree parent = wbsTreeMapper.selectById((dept.getParentId()));
+            if (Func.toLong(dept.getParentId()) == Func.toLong(dept.getId())) {
+                throw new ServiceException("父节点不可选择自身!");
+            }
+            dept.setTenantId(parent.getTenantId());
+            String ancestors = parent.getAncestors() + StringPool.COMMA + dept.getParentId();
+            dept.setAncestors(ancestors);
+            //设置表示该父节点下存在表单
+            wbsTreeMapper.updateIsExistFormById(parent.getId());
+        }
+        //设置类型默认值为 '2' 表单
+        dept.setType(2);
+        dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+        dept.setDeptCategory(1);
+        dept.setStatus(1);
+        return wbsTreeMapper.insert(dept) > 0;
+
     }
 
     public boolean syncDataFiled(String initTableName, List<WbsFormElement> listData) {
@@ -357,7 +510,6 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         return true;
     }
 
-
     private String getInitTableFiledType(Integer type) {
         switch (type) {
             case 2:
@@ -380,17 +532,34 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
 
     private Integer getElementLength(String type) {
         switch (type) {
-            case "varchar":
-                return 1000;
-            case "bigint":
+            case "字符串":
+            case "签名":
+            case "文件":
                 return 255;
-            case "decimal":
-                return 65;
-            case "datetime":
+            case "整数":
+            case "数值":
+            case "小数":
+                return 20;
+            case "日期":
             default:
                 return 0;
         }
     }
 
+    private String setDefaultElementLength(Integer type) {
+        switch (type) {
+            case 1:  //字符串
+            case 7:  //文件
+            case 6:  //签名
+                return "255";
+            case 2:  //整数
+            case 5:  //数值
+            case 3:  //小数
+                return "20";
+            case 4:  //日期
+            default:
+                return "0";
+        }
+    }
 
 }

+ 0 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -138,7 +138,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         dept.setType(2);
         dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
         return saveOrUpdate(dept);
-
     }
 
     public boolean submit3(WbsTree dept) {