|
@@ -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);
|