lfx 9 mēneši atpakaļ
vecāks
revīzija
5ee0d145c7

+ 19 - 1
mjava-aiwei/src/main/java/com/malk/aiwei/controller/TBxYDController.java

@@ -315,7 +315,7 @@ public class TBxYDController {
     }
 
     /**
-     * 搭配
+     * 
      */
     @PostMapping("export")
     void export(@RequestBody Map data, HttpServletResponse response) {
@@ -325,6 +325,24 @@ public class TBxYDController {
         UtilExcel.exportMapAndListByTemplate(response, dataList, Map.class, fileName, tempFileName);
     }
 
+    /**
+     * 导入前处理
+     */
+    @PostMapping("beforeImportData")
+    McR beforeImportData(@RequestBody Map data, HttpServletResponse response) {
+        Map result=awClint.checkImportData(data);
+        Boolean flag=UtilMap.getBoolean(result,"flag");
+        List<Map> resultData = UtilMap.getList(result,"data");
+        if(flag){
+            return McR.success(resultData);
+        }else{
+            String fileName = "异常";
+            String tempFileName = "templates_xqwh_result.xlsx";
+            UtilExcel.exportMapAndListByTemplate(response, resultData, Map.class, fileName, tempFileName);
+            return null;
+        }
+    }
+
     //////// test ////////
 
     @Autowired

+ 2 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/service/AWClint.java

@@ -113,4 +113,6 @@ public interface AWClint {
     List<Map> getProductList(String projectId,String q,String taskId);
 
     void custFieldUpdate(JSONObject data);
+
+    Map checkImportData(Map data);
 }

+ 158 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/service/impl/AWImplClient.java

@@ -28,6 +28,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 @Service
@@ -1779,6 +1781,162 @@ public class AWImplClient implements AWClint {
         }
     }
 
+    @Override
+    public Map checkImportData(Map data) {
+        List<Map> dataList=UtilMap.getList(data,"dataList");
+        String charter = UtilMap.getString(data,"charter");
+        // 根据charter查询需求库
+        List<Map> list=ydService.queryFormData_all(YDParam.builder()
+                .appType("APP_YQY0OH7953OKBTM57PLL")
+                .systemToken("PGC66MB1H2RLXMFQ7XKW4BC3BDFJ2UDM909XL18")
+                .formUuid("FORM-7A52930D0E834522AD65A4CFE2C0818F1KQO")
+                .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_lth2h04b",charter))).build());
+        Map<String,Map> charterMap=new HashMap();
+        for (int j = 0; j < list.size(); j++) {
+            Map item=list.get(j);
+            String no = getCode(UtilMap.getString(item,"textField_lt2d2x79"));
+            charterMap.put(no,item);
+            list.get(j).put("id",no);
+        }
+        Boolean flag=true;
+        Map noList=new HashMap();
+        // 数据校验
+        for (int i = 0; i < dataList.size(); i++) {
+            String errmsg="";
+            Map item=dataList.get(i);
+            String category=UtilMap.getString(item,"selectField_lronu2g3");
+            if(StringUtils.isBlank(category)){
+                errmsg=errmsg+"需求大类不能为空;";
+            }else{
+                category = category.split("(")[1].replace(")", "");
+                String no = noCP(UtilMap.getString(item,"textField_lt2d2x79"), category);
+                String fno = noCP(UtilMap.getString(item,"textField_m0afm8pd"), category);
+                if (!isValidVersion(no)) {
+                    errmsg = errmsg + "需求编号格式错误;";
+                }
+                if (noList.containsKey(category + no)) {
+                    errmsg = errmsg + "需求编号重复;";
+                }
+                noList.put(category + no,category + no);
+                int cj = getSize(no);
+                if (cj == 1) {
+                    dataList.get(i).put("textField_m0afm8pd","");
+                } else {
+                    if (!isValidVersion(fno)) {
+                        errmsg = errmsg + "父需求编号格式错误;";
+                    }
+                    if (cj - 1 != getSize(fno)) {
+                        errmsg = errmsg + "父需求编号层级错误;";
+                    }
+                    if (StringUtils.isNotBlank(fno) && !noList.containsKey(fno)) {
+                        // 导入数据前父需求编号不存在
+                        if(!charterMap.containsKey(getCode(UtilMap.getString(item,"textField_m0afm8pd")))){
+                            errmsg = errmsg + "父需求编号数据不存在;";
+                        }
+                    }
+                }
+                if (fno == no) {
+                    errmsg = errmsg + "需求编号于父需求编号不能相同;";
+                }
+                dataList.get(i).put("selectField_lr4y2xcj",cj + "级");
+                dataList.get(i).put("multiSelectField_lw678e43_str",String.join(",",UtilMap.getList(item,"multiSelectField_lw678e43")));
+            }
+            if(errmsg!=""){
+                dataList.get(i).put("result",errmsg);
+                flag=false;
+            }
+        }
+        if(flag){
+            for (int i = 0; i < dataList.size(); i++) {
+                Map item=dataList.get(i);
+                String no=UtilMap.getString(item,"textField_lt2d2x79");
+                String codeNo=getCode(no);
+                if(charterMap.containsKey(codeNo)){
+                    dataList.get(i).put("associationFormField_lvy7yjq8",getAss(no,UtilMap.getString(charterMap,"instanceId")));
+                }else{
+                    // 新增
+                    String category=UtilMap.getString(item,"selectField_lronu2g3");
+                    String categoryNew = category.split("(")[1].replace(")", "");
+                    no = noCP(UtilMap.getString(item,"textField_lt2d2x79"), categoryNew);
+                    String fno = noCP(UtilMap.getString(item,"textField_m0afm8pd"), categoryNew);
+                    dataList.get(i).put("textField_lt2d2x79",no);
+                    dataList.get(i).put("textField_m0afm8pd",fno);
+                    int level = getSize(no);
+                    dataList.get(i).put("selectField_lr4y2xcj",level + "级");
+                    // 根据层级查询序号
+                    String noNew="";
+                    Map reMap=getMaxValue(list,level + "级",category);
+                    // 处理结果
+                    if(level>1){
+
+                    }
+                    if(reMap!=null){
+                        String id=UtilMap.getString(reMap,"id");
+                        System.out.println(id);
+                    }else{
+                        noNew=categoryNew+ (level==1?"001":".1");
+                    }
+                    // 拼装数据并新增需求
+                    codeNo=noNew;
+                }
+                dataList.get(i).put("textField_lyqprdyf",codeNo); // 序号
+            }
+        }
+        return UtilMap.map("data, flag", dataList,flag);
+    }
+
+    private Map getMaxValue(List<Map> list, String level, String category){
+        // 查找符合条件的最大 id
+        List<Map> list1=list.stream()
+                .filter(map -> UtilMap.getString(map, "selectField_lr4y2xcj").equals(level))
+                .filter(map -> UtilMap.getString(map, "selectField_lronu2g3").equals(category)).collect(Collectors.toList());
+        Optional<Map> maxMap = list1.stream()
+                .max(Comparator.comparing(map -> UtilMap.getString(map,"id")));
+        return maxMap.orElse(null);
+    }
+
+    private Object getAss(String title,String id){
+        return Arrays.asList(UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle","APP_YQY0OH7953OKBTM57PLL","FORM-7A52930D0E834522AD65A4CFE2C0818F1KQO","receipt",id,title,""));
+    }
+
+    private static int getSize(String value) {
+        return value.split("\\.").length;
+    }
+
+    private Boolean isValidVersion(String version) {
+        Pattern pattern = Pattern.compile("^([0-9]{1,3}(\\.[0-9]{1,3}){0,2})$");
+        Matcher matcher = pattern.matcher(version);
+        return matcher.matches();
+    }
+
+    private String noCP(String value, String category) {
+        if (value.contains(category)) {
+            return getCode(value).replace(category, "").replaceAll("^0+", "");
+        } else {
+            return value;
+        }
+    }
+
+    private String getCode(String pCode) {
+        if (!pCode.contains("_")) {
+            return pCode;
+        }
+        if (isNumeric(pCode.split("_")[0])) {
+            // 时间_序号
+            return pCode.split("_")[1];
+        } else if (isNumeric(pCode.split("_")[1])) {
+            // 序号_时间
+            return pCode.split("_")[0];
+        }
+        return pCode;
+    }
+
+    private boolean isNumeric(String str) {
+        Pattern pattern = Pattern.compile("^\\d+$");
+        Matcher matcher = pattern.matcher(str);
+        return matcher.matches();
+    }
+
     private List<Map> getProductData(String projectId, String q, String qKey, String tCode) {
         // 校验项目号
         YDSearch ytbProjectId = new YDSearch("textField_lqxtykce", projectId, "TB项目编号", YDSearch.Type.TEXT_FIELD, YDSearch.Operator.EQ);

BIN
mjava-aiwei/src/main/resources/templates/需求入库_数据模板.xlsx


BIN
mjava-aiwei/src/main/resources/templates/templates_xqwh.xlsx


BIN
mjava-aiwei/src/main/resources/templates/templates_xqwh_result.xlsx