|
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.malk.aiwei.service.AWYDClient;
|
|
|
import com.malk.server.aliwork.YDConf;
|
|
|
import com.malk.server.aliwork.YDParam;
|
|
|
+import com.malk.server.dingtalk.DDR_New;
|
|
|
import com.malk.service.aliwork.YDClient;
|
|
|
import com.malk.service.aliwork.YDService;
|
|
|
import com.malk.utils.UtilMap;
|
|
@@ -16,6 +17,7 @@ import org.springframework.stereotype.Service;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -45,9 +47,532 @@ public class AWYDImplClient implements AWYDClient {
|
|
|
}).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
+ /// 产品需求
|
|
|
+ String appType_pr = "APP_YQY0OH7953OKBTM57PLL";
|
|
|
+ String systemToken_pr = "PGC66MB1H2RLXMFQ7XKW4BC3BDFJ2UDM909XL18";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 项目需求导入校验 [0910 更新版本]
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Map checkImportData_projectRequirements(String charter, List<Map> dataList, boolean isSubmit) {
|
|
|
+
|
|
|
+ /// fixme prd 0913 Charter子类不作为匹配条件, 可能存在跨情况. 引用\覆盖核心参数覆盖, 其余作为bom属性. 通过charter则全量载入
|
|
|
+ boolean isSuccess = true;
|
|
|
+ List<String> prList = new ArrayList<>();
|
|
|
+
|
|
|
+ // 提交前再次校验,兼容手动新增情况【手动新增只能选择需求库】
|
|
|
+ if (isSubmit) {
|
|
|
+ for (Map row : dataList) {
|
|
|
+ String code = UtilMap.getString(row, "textField_m0vvv72j");
|
|
|
+ if (StringUtils.isNotBlank(code) && prList.contains(code)) {
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", code + "需求在当前列表已存在, 请检查数据后重新导入");
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ prList.add(code);
|
|
|
+ }
|
|
|
+ return UtilMap.map("isSuccess, dataList", isSuccess, dataList);
|
|
|
+ }
|
|
|
+
|
|
|
+ // ppExt 可能存在同时新增一二三级需求, 按照层级导入, 已处理替换新增引用需求编号, 再恢复排序 [ prd 保留原导入排序 ]
|
|
|
+ int index = 0;
|
|
|
+ for (Map row : dataList) {
|
|
|
+ row.put("order", index); // sort 内不仅仅循环
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ dataList.sort(Comparator.comparingInt(item -> Integer.valueOf(UtilMap.getString(item, "selectField_lr4y2xcj").replace("级", ""))));
|
|
|
+
|
|
|
+ // ‒ 关闭需求入库入口,仅需求编号、名称、描述、大类、子类不可修改,作为唯一条件,其他信息可维护
|
|
|
+ Map condition = UtilMap.map("selectField_lronu2g3, selectField_lvy6fgqe, textField_lt2d2x7b, textareaField_lt2d2x7c", "需求大类不能为空", "需求子类不能为空", "需求名称不能为空", "需求描述不能为空");
|
|
|
+ for (Map row : dataList) {
|
|
|
+ // 清理导入状态标志
|
|
|
+ row.put("selectField_m10k093c", "");
|
|
|
+ row.put("textareaField_m10k093a", "");
|
|
|
+ // 效验需求层级 & 父需求编号逻辑
|
|
|
+ if (UtilMap.isBlankString(row, "selectField_lr4y2xcj")) {
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", "需求层级不能为空, 请检查数据后重新导入");
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // prd: 0914 需求层级关系不判断, 如1级需求是否有父编号, 3级需求是不是挂到了一级. 后续树形展开时兼容处理
|
|
|
+ String level = UtilMap.getString(row, "selectField_lr4y2xcj");
|
|
|
+ if (!"1级".equals(level)) {
|
|
|
+ if (UtilMap.isBlankString(row, "textField_m0afm8pd")) {
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", level + "需求对应父需求编号不能为空, 请检查数据后重新导入");
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (UtilMap.getString(row, "textField_m0vvv72j").equals(UtilMap.getString(row, "textField_m0afm8pd"))) {
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", level + "需求父编号引用了当前编号, 请检查数据后重新导入");
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // ppExt 当前导入列表必须存在对应的父需求编号, 且唯一性. [ fixme 已过滤掉引用自身情况, 且添加提交时校验需求编号不能重复, 9.19 按照层级导入, 无需记录原始编号, 已处理替换新增引用需求编号 ]
|
|
|
+ List<Map> mList = dataList.stream().filter(item -> row.get("textField_m0afm8pd").equals(item.get("textField_m0vvv72j"))).collect(Collectors.toList());
|
|
|
+ if (mList.size() != 1) {
|
|
|
+ String desc = mList.size() == 0 ? "未匹配到" : "不唯一";
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", level + "需求对应父需求编号" + desc + ", 请检查数据后重新导入");
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 根据需求编号判断需求名称与描述以及大类是否一致,如果是非一级需求需要增加校验父需求编号是否一致
|
|
|
+ String code = UtilMap.getString(row, "textField_m0vvv72j");
|
|
|
+ if (StringUtils.isNotBlank(code)) {
|
|
|
+
|
|
|
+ // 重复需求编号校验
|
|
|
+ if (prList.contains(code)) {
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", code + "需求在当前列表已存在, 请检查数据后重新导入");
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ prList.add(code);
|
|
|
+
|
|
|
+ List<Map> searchCondition = Arrays.asList(YDConf.searchCondition_TextFiled("serialNumberField_lr4xs4zi", code, "eq"));
|
|
|
+ List<Map> tList = (List<Map>) ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formUuid("FORM-7A52930D0E834522AD65A4CFE2C0818F1KQO")
|
|
|
+ .searchCondition(JSON.toJSONString(searchCondition))
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
+ if (tList.size() > 0) {
|
|
|
+ Map formData = UtilMap.getMap(tList.get(0), "formData");
|
|
|
+ // 校验父需求编号是否一致
|
|
|
+ if (!UtilMap.getString(formData, "textField_m0afm8pd").equals(UtilMap.getString(row, "textField_m0afm8pd"))) {
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", "父需求编号与求库内编号" + formData.get("textField_m0afm8pd") + "不一致, 请检查数据后重新导入");
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ row.put("textField_m0vvv72j", formData.get("serialNumberField_lr4xs4zi")); // 赋值需求编号
|
|
|
+ // 匹配需求编号, 条件内数据以原始数据覆盖导入数据
|
|
|
+ for (Object key : condition.keySet()) {
|
|
|
+ row.put(key, UtilMap.getString(formData, String.valueOf(key)));
|
|
|
+ }
|
|
|
+ row.put("associationFormField_lvy7yjq8", YDConf.associationForm(appType_pr, "FORM-7A52930D0E834522AD65A4CFE2C0818F1KQO", UtilMap.getString(tList.get(0), "formInstanceId"), code, "", false));
|
|
|
+ row.put("selectField_m10k093c", "引用");
|
|
|
+ row.put("textareaField_m10k093a", "已匹配需求编号, 条件内数据以原始数据覆盖导入数据");
|
|
|
+ row.put("attachmentField_lticyied", UtilMap.getString(formData, "attachmentField_lticyied")); // 保留附件
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 控制匹配条件 [ prd: 同时兼容, 有编号未匹配到数据, 通过填写内容识别 ppExt: 编号不清空, 可能存在同时新增一二三级需求 ]
|
|
|
+ for (Object prop : condition.keySet()) {
|
|
|
+ if (UtilMap.isBlankString(row, String.valueOf(prop))) {
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", condition.get(prop) + ", 请检查数据后重新导入");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (UtilMap.isNotBlankString(row, "textareaField_m10k093a")) {
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 若有,执行替换逻辑, 备注体现原始被替换编号
|
|
|
+ List<Map> searchCondition = new ArrayList<>();
|
|
|
+ for (Object key : condition.keySet()) {
|
|
|
+ searchCondition.add(YDConf.searchCondition_TextFiled(String.valueOf(key), row.get(key), "eq"));
|
|
|
+ }
|
|
|
+ List<Map> tList = (List<Map>) ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formUuid("FORM-7A52930D0E834522AD65A4CFE2C0818F1KQO")
|
|
|
+ .searchCondition(JSON.toJSONString(searchCondition))
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
+ if (tList.size() > 0) {
|
|
|
+ Map formData = UtilMap.getMap(tList.get(0), "formData");
|
|
|
+ String rCode = UtilMap.getString(formData, "serialNumberField_lr4xs4zi");
|
|
|
+ // 替换新增引用需求编号
|
|
|
+ dataList.stream().filter(item -> StringUtils.isNotBlank(code) &&
|
|
|
+ !"1级".equals(UtilMap.getString(item, "selectField_lr4y2xcj")) &&
|
|
|
+ row.get("textField_m0vvv72j").equals(item.get("textField_m0afm8pd"))).forEach(item -> item.put("textField_m0afm8pd", rCode));
|
|
|
+ row.put("selectField_m10k093c", "替换");
|
|
|
+ row.put("textareaField_m10k093a", code + "需求已替换, " + UtilMap.getString(formData, "serialNumberField_lr4xs4zi") + "需求库中相同条件需求");
|
|
|
+ row.put("associationFormField_lvy7yjq8", YDConf.associationForm(appType_pr, "FORM-7A52930D0E834522AD65A4CFE2C0818F1KQO", UtilMap.getString(tList.get(0), "formInstanceId"), rCode, "", false));
|
|
|
+ row.put("textField_m0afm8pd", UtilMap.getString(formData, "textField_m0afm8pd")); // 替换父需求编号
|
|
|
+ row.put("attachmentField_lticyied", UtilMap.getString(formData, "attachmentField_lticyied")); // 保留附件
|
|
|
+ row.put("textField_m0vvv72j", rCode);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ row.put("selectField_m10k093c", "新增");
|
|
|
+ row.put("textareaField_m10k093a", "需求编号不存在, 评审通过后需求库新增");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dataList.sort(Comparator.comparingInt(item -> UtilMap.getInt(item, "order"))); // 恢复原排序
|
|
|
+ return UtilMap.map("isSuccess, dataList", isSuccess, dataList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 项目需求审批通过后, 回写需求编号与关联表单, ppExt 并覆盖项目需求档案需求列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void dealApprovedData_projectRequirements(String pCode, String instanceId, Map data) {
|
|
|
+
|
|
|
+ // 项目需求数据
|
|
|
+ DDR_New ddr_new = ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formInstanceId(instanceId)
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_id);
|
|
|
+ Map formData = ddr_new.getFormData();
|
|
|
+
|
|
|
+ List<Map> details = (List<Map>) formData.get("tableField_lt2d2x78");
|
|
|
+ if (details.size() == YDConf.PAGE_SIZE_DETAILS) {
|
|
|
+ details = ydService.queryDetails(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formUuid("FORM-2326752634AA463EAA8AE81DD8E19E88AJ6K")
|
|
|
+ .formInstanceId(ddr_new.getFormInstId())
|
|
|
+ .tableFieldId("tableField_lt2d2x78")
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ // ppExt 编号不清空, 可能存在同时新增一二三级需求. 提取新增需求, 排序优先写入一级需求 [ prd 保留原导入排序 ]
|
|
|
+ List<Map> ttList = new ArrayList<>();
|
|
|
+ AtomicInteger index = new AtomicInteger();
|
|
|
+ details = details.stream().filter((item) ->
|
|
|
+ {
|
|
|
+ item.put("sCode", UtilMap.getString(item, "textField_m0vvv72j"));
|
|
|
+ item.put("order", index.intValue()); // 避免对象引用, 保留值
|
|
|
+ index.getAndIncrement();
|
|
|
+ boolean isCreate = "新增".equals(item.get("selectField_m10k093c"));
|
|
|
+ if (UtilMap.isNotBlankString(item, "attachmentField_lticyied")) {
|
|
|
+ item.put("attachmentField_lticyied", JSONObject.parse(UtilMap.getString(item, "attachmentField_lticyied")));
|
|
|
+ }
|
|
|
+ if (!isCreate) {
|
|
|
+ item.put("associationFormField_lvy7yjq8", YDConf.associationForm(UtilMap.getString(item, "associationFormField_lvy7yjq8_id")));
|
|
|
+ ttList.add(item);
|
|
|
+ }
|
|
|
+ return isCreate;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ details.sort(Comparator.comparingInt(item -> Integer.valueOf(UtilMap.getString(item, "selectField_lr4y2xcj").replace("级", ""))));
|
|
|
+
|
|
|
+ for (Map detail : details) {
|
|
|
+ // 主表信息需完善
|
|
|
+ detail.putAll(UtilMap.map("textField_lth2h04b, textField_lypq3ees, textField_lypq3eet", "charter, pdt, mpdt", data));
|
|
|
+ detail.putAll(UtilMap.map("radioField_lroozhse, dateField_ly5ewjnf, employeeField_ly5ewjnc", "启用", new Date().getTime(), Arrays.asList(data.get("userId"))));
|
|
|
+ String formInstId = (String) ydClient.operateData(YDParam.builder()
|
|
|
+ .formUuid("FORM-7A52930D0E834522AD65A4CFE2C0818F1KQO")
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formDataJson(JSONObject.toJSONString(detail)) // 子表组件ID与档案一致
|
|
|
+ .build(), YDConf.FORM_OPERATION.create);
|
|
|
+ // 查询新增数据后, 需求编号
|
|
|
+ Map crData = ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formInstanceId(formInstId)
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
|
|
|
+ String rCode = UtilMap.getString(crData, "serialNumberField_lr4xs4zi");
|
|
|
+ // 若是引用, 导入已匹配父需求编号可过滤 [ 已按照层级导入, 更新当前父需求编号即可 ]
|
|
|
+ if (!"1级".equals(UtilMap.getString(detail, "selectField_lr4y2xcj"))) {
|
|
|
+ Optional optional = details.stream().filter(item -> item.get("sCode").equals(detail.get("textField_m0afm8pd"))).findAny();
|
|
|
+ if (optional.isPresent()) {
|
|
|
+ detail.put("textField_m0afm8pd", ((Map) optional.get()).get("textField_m0vvv72j"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ detail.put("associationFormField_lvy7yjq8", YDConf.associationForm(appType_pr, "FORM-7A52930D0E834522AD65A4CFE2C0818F1KQO", formInstId, rCode, "", false));
|
|
|
+ detail.put("textField_m0vvv72j", rCode);
|
|
|
+ detail.put("selectField_m10k093c", "已新增"); // 兼容重复调用
|
|
|
+ ttList.add(detail);
|
|
|
+ }
|
|
|
+ ttList.sort(Comparator.comparingInt(item -> UtilMap.getInt(item, "order"))); // 恢复原排序
|
|
|
+
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formInstanceId(instanceId)
|
|
|
+ .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("tableField_lt2d2x78", ttList)))
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
+
|
|
|
+ // 覆盖项目需求档案需求列表 [最新版本]
|
|
|
+ List<Map> searchCondition = Arrays.asList(YDConf.searchCondition_TextFiled("textField_lt6xd8lm", pCode, "eq"));
|
|
|
+ List<Map> tList = (List<Map>) ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formUuid("FORM-480F7D71D1F44B9D92946BE95C1F2656JKAU")
|
|
|
+ .searchCondition(JSON.toJSONString(searchCondition))
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
+ if (tList.size() > 0) {
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formInstanceId(UtilMap.getString(tList.get(0), "formInstanceId"))
|
|
|
+ .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("tableField_lt2d2x78, radioField_m11lu528", ttList, "是")))
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 覆盖项目需求档案需求列表 tmp
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void archiveProjectRequirements(String pCode, String instanceId) {
|
|
|
+
|
|
|
+ // 项目需求数据
|
|
|
+ DDR_New ddr_new = ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formInstanceId(instanceId)
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_id);
|
|
|
+ Map formData = ddr_new.getFormData();
|
|
|
+
|
|
|
+ List<Map> details = (List<Map>) formData.get("tableField_lt2d2x78");
|
|
|
+ if (details.size() == YDConf.PAGE_SIZE_DETAILS) {
|
|
|
+ details = ydService.queryDetails(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formUuid("FORM-2326752634AA463EAA8AE81DD8E19E88AJ6K")
|
|
|
+ .formInstanceId(ddr_new.getFormInstId())
|
|
|
+ .tableFieldId("tableField_lt2d2x78")
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ details = details.stream().map((item) ->
|
|
|
+ {
|
|
|
+ if (UtilMap.isNotBlankString(item, "attachmentField_lticyied")) {
|
|
|
+ item.put("attachmentField_lticyied", JSONObject.parse(UtilMap.getString(item, "attachmentField_lticyied")));
|
|
|
+ }
|
|
|
+ item.put("associationFormField_lvy7yjq8", YDConf.associationForm(UtilMap.getString(item, "associationFormField_lvy7yjq8_id")));
|
|
|
+ return item;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 覆盖项目需求档案需求列表 [最新版本]
|
|
|
+ List<Map> searchCondition = Arrays.asList(YDConf.searchCondition_TextFiled("textField_lt6xd8lm", pCode, "eq"));
|
|
|
+ List<Map> tList = (List<Map>) ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formUuid("FORM-480F7D71D1F44B9D92946BE95C1F2656JKAU")
|
|
|
+ .searchCondition(JSON.toJSONString(searchCondition))
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .appType(appType_pr)
|
|
|
+ .systemToken(systemToken_pr)
|
|
|
+ .formInstanceId(UtilMap.getString(tList.get(0), "formInstanceId"))
|
|
|
+ .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("tableField_lt2d2x78, radioField_m11lu528", details, "是")))
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// 产品规格
|
|
|
+// String appType_ps = "APP_SQB02DVSNJJJ9XE2XEW4";
|
|
|
+// String systemToken_ps = "Q9966X618IQLEQ166YMEWC3DJYU9310KY1AXLUL";
|
|
|
+
|
|
|
+ String appType_ps = "APP_DINTFSNSIJPX533M3CQK";
|
|
|
+ String systemToken_ps = "PTA66DA1S5QO5MDPBPN8V6CS4Q0O2LYISD91M024";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 项目规格导入校验 [0919 更新版本] fixme 复制\简化无层级项目需求实现逻辑
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Map checkImportData_projectSpecification(String charter, List<Map> dataList, List<String> prList, boolean isSubmit) {
|
|
|
+
|
|
|
+ boolean isSuccess = true;
|
|
|
+ List<String> psList = new ArrayList<>();
|
|
|
+
|
|
|
+ // ‒ 匹配条件,仅规格编号、分类、类型、子类、描述、条件不可修改,作为唯一条件,其他信息作为bom属性可维护
|
|
|
+ Map condition = UtilMap.map("selectField_lti2e638, textField_lt2vdhtd, textField_lt2vdhte, textField_lt2vdhtf, textField_lt2vdhtg", "规格分类不能为空", "规格类型不能为空", "规格子类不能为空", "规格描述不能为空", "规格条件不能为空");
|
|
|
+ for (Map row : dataList) {
|
|
|
+ // 清理导入状态标志
|
|
|
+ row.put("selectField_m10k093c", "");
|
|
|
+ row.put("textareaField_m10k093a", "");
|
|
|
+
|
|
|
+ // ppExt 需求库校验逻辑: 1. 需求编号不能为空且必须在需求列表中, 2.需求相关数据不修改, 只引用规格内容 [解决前端关联表单导出再导入后丢失问题]
|
|
|
+ if (!prList.contains(UtilMap.getString(row, "textField_m0vvv72j"))) {
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", UtilMap.getString(row, "textField_m0vvv72j") + "需求在列表中不存在, 请检查数据后重新导入");
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String code = UtilMap.getString(row, "textField_m18x4yqo");
|
|
|
+ if (StringUtils.isNotBlank(code)) {
|
|
|
+ // 重复需求+规格编号校验
|
|
|
+ String uCode = UtilMap.getString(row, "textField_m0vvv72j") + "-" + UtilMap.getString(row, "textField_m18x4yqo");
|
|
|
+ if (psList.contains(uCode)) {
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", uCode + "需求+规格在当前列表已存在, 请检查数据后重新导入");
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ psList.add(uCode);
|
|
|
+
|
|
|
+ if (!isSubmit) {
|
|
|
+ List<Map> searchCondition = Arrays.asList(YDConf.searchCondition_TextFiled("serialNumberField_lti2e639", code, "eq"));
|
|
|
+ List<Map> tList = (List<Map>) ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_ps)
|
|
|
+ .systemToken(systemToken_ps)
|
|
|
+// .formUuid("FORM-C1BB004F74C1492DB3F568EA8A7A951C7NBY")
|
|
|
+ .formUuid("FORM-F5FD52E311514AC890D4B308CFA8E8A8BH8J")
|
|
|
+ .searchCondition(JSON.toJSONString(searchCondition))
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
+ if (tList.size() > 0) {
|
|
|
+ Map formData = UtilMap.getMap(tList.get(0), "formData");
|
|
|
+ row.put("serialNumberField_lti2e639", formData.get("serialNumberField_lti2e639")); // 赋值规格编号
|
|
|
+ // 匹配规格编号, 条件内数据以原始数据覆盖导入数据
|
|
|
+ for (Object key : condition.keySet()) {
|
|
|
+ row.put(key, UtilMap.getString(formData, String.valueOf(key)));
|
|
|
+ }
|
|
|
+// row.put("associationFormField_m18x4yqq", YDConf.associationForm(appType_pr, "FORM-C1BB004F74C1492DB3F568EA8A7A951C7NBY", UtilMap.getString(tList.get(0), "formInstanceId"), code, "", false));
|
|
|
+ row.put("associationFormField_m18x4yqq", YDConf.associationForm(appType_pr, "FORM-F5FD52E311514AC890D4B308CFA8E8A8BH8J", UtilMap.getString(tList.get(0), "formInstanceId"), code, "", false));
|
|
|
+ row.put("selectField_m10k093c", "引用");
|
|
|
+ row.put("textareaField_m10k093a", "已匹配规格编号, 条件内数据以原始数据覆盖导入数据");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 控制匹配条件 [ prd: 同时兼容, 有编号未匹配到数据, 通过填写内容识别 ]
|
|
|
+ for (Object prop : condition.keySet()) {
|
|
|
+ if (UtilMap.isBlankString(row, String.valueOf(prop))) {
|
|
|
+ row.put("selectField_m10k093c", "失败");
|
|
|
+ row.put("textareaField_m10k093a", condition.get(prop) + ", 请检查数据后重新导入");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (UtilMap.isNotBlankString(row, "textareaField_m10k093a")) {
|
|
|
+ isSuccess = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!isSubmit) {
|
|
|
+ // 若有,执行替换逻辑, 备注体现原始被替换编号
|
|
|
+ List<Map> searchCondition = new ArrayList<>();
|
|
|
+ for (Object key : condition.keySet()) {
|
|
|
+ searchCondition.add(YDConf.searchCondition_TextFiled(String.valueOf(key), row.get(key), "eq"));
|
|
|
+ }
|
|
|
+ List<Map> tList = (List<Map>) ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_ps)
|
|
|
+ .systemToken(systemToken_ps)
|
|
|
+// .formUuid("FORM-C1BB004F74C1492DB3F568EA8A7A951C7NBY")
|
|
|
+ .formUuid("FORM-F5FD52E311514AC890D4B308CFA8E8A8BH8J")
|
|
|
+ .searchCondition(JSON.toJSONString(searchCondition))
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
+ if (tList.size() > 0) {
|
|
|
+ Map formData = UtilMap.getMap(tList.get(0), "formData");
|
|
|
+ String rCode = UtilMap.getString(formData, "serialNumberField_lti2e639");
|
|
|
+ row.put("selectField_m10k093c", "替换");
|
|
|
+ row.put("textareaField_m10k093a", code + "规格已替换, " + UtilMap.getString(formData, "serialNumberField_lti2e639") + "规格库中相同条件规格");
|
|
|
+// row.put("associationFormField_m18x4yqq", YDConf.associationForm(appType_pr, "FORM-C1BB004F74C1492DB3F568EA8A7A951C7NBY", UtilMap.getString(tList.get(0), "formInstanceId"), rCode, "", false));
|
|
|
+ row.put("associationFormField_m18x4yqq", YDConf.associationForm(appType_pr, "FORM-F5FD52E311514AC890D4B308CFA8E8A8BH8J", UtilMap.getString(tList.get(0), "formInstanceId"), rCode, "", false));
|
|
|
+ row.put("textField_m18x4yqo", rCode);
|
|
|
+ } else {
|
|
|
+ row.put("selectField_m10k093c", "新增");
|
|
|
+ row.put("textareaField_m10k093a", "规格编号不存在, 评审通过后规格库新增");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return UtilMap.map("isSuccess, dataList", isSuccess, dataList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 项目规格审批通过后, 回写规格编号与关联表单
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void dealApprovedData_projectSpecification(String instanceId, Map data) {
|
|
|
+ // 项目需求数据
|
|
|
+ DDR_New ddr_new = ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_ps)
|
|
|
+ .systemToken(systemToken_ps)
|
|
|
+ .formInstanceId(instanceId)
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_id);
|
|
|
+ Map formData = ddr_new.getFormData();
|
|
|
+ List<Map> details = (List<Map>) formData.get("tableField_lt2d2x78");
|
|
|
+ if (details.size() == YDConf.PAGE_SIZE_DETAILS) {
|
|
|
+ details = ydService.queryDetails(YDParam.builder()
|
|
|
+ .appType(appType_ps)
|
|
|
+ .systemToken(systemToken_ps)
|
|
|
+// .formUuid("FORM-2C5D914DC3974745AA6F55CB916E82FEH5UA")
|
|
|
+ .formUuid("FORM-A1809FBB82E54CB387B372E3B15457E7IOVV")
|
|
|
+ .formInstanceId(ddr_new.getFormInstId())
|
|
|
+ .tableFieldId("tableField_lt2d2x78")
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean isUpdate = false;
|
|
|
+ for (Map detail : details) {
|
|
|
+ if (UtilMap.isNotBlankString(detail, "attachmentField_lticyied")) {
|
|
|
+ detail.put("attachmentField_lticyied", JSONObject.parse(UtilMap.getString(detail, "attachmentField_lticyied")));
|
|
|
+ }
|
|
|
+ detail.put("associationFormField_lvy7yjq8", YDConf.associationForm(UtilMap.getString(detail, "associationFormField_lvy7yjq8_id")));
|
|
|
+
|
|
|
+ boolean isCreate = "新增".equals(detail.get("selectField_m10k093c"));
|
|
|
+ if (!isCreate) {
|
|
|
+ detail.put("associationFormField_m18x4yqq", YDConf.associationForm(UtilMap.getString(detail, "associationFormField_m18x4yqq_id")));
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 主表信息需完善
|
|
|
+ detail.putAll(UtilMap.map("selectField_lwq7bv4z, selectField_lwq7bv51", "charter, pdt", data));
|
|
|
+ detail.put("radioField_lti2e636", "启用");
|
|
|
+ String formInstId = (String) ydClient.operateData(YDParam.builder()
|
|
|
+// .formUuid("FORM-C1BB004F74C1492DB3F568EA8A7A951C7NBY")
|
|
|
+ .formUuid("FORM-F5FD52E311514AC890D4B308CFA8E8A8BH8J")
|
|
|
+ .appType(appType_ps)
|
|
|
+ .systemToken(systemToken_ps)
|
|
|
+ .formDataJson(JSONObject.toJSONString(detail)) // 子表组件ID与档案一致
|
|
|
+ .build(), YDConf.FORM_OPERATION.create);
|
|
|
+ // 查询新增数据后, 规格编号
|
|
|
+ Map crData = ydClient.queryData(YDParam.builder()
|
|
|
+ .appType(appType_ps)
|
|
|
+ .systemToken(systemToken_ps)
|
|
|
+ .formInstanceId(formInstId)
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
|
|
|
+ String rCode = UtilMap.getString(crData, "serialNumberField_lti2e639");
|
|
|
+// detail.put("associationFormField_lvy7yjq8", YDConf.associationForm(appType_ps, "FORM-C1BB004F74C1492DB3F568EA8A7A951C7NBY", formInstId, rCode, "", false));
|
|
|
+ detail.put("associationFormField_m18x4yqq", YDConf.associationForm(appType_ps, "FORM-F5FD52E311514AC890D4B308CFA8E8A8BH8J", formInstId, rCode, "", false));
|
|
|
+ detail.put("textField_m18x4yqo", rCode);
|
|
|
+ detail.put("selectField_m10k093c", "已新增"); // 兼容重复调用
|
|
|
+ isUpdate = true;
|
|
|
+ }
|
|
|
+ if (isUpdate) {
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .appType(appType_ps)
|
|
|
+ .systemToken(systemToken_ps)
|
|
|
+ .formInstanceId(instanceId)
|
|
|
+ .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("tableField_lt2d2x78", details)))
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void test() {
|
|
|
+
|
|
|
+// this._test0912();
|
|
|
+
|
|
|
+ List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
|
|
|
+ .appType(appType_ps)
|
|
|
+ .systemToken(systemToken_ps)
|
|
|
+ .formUuid("FORM-2C5D914DC3974745AA6F55CB916E82FEH5UA")
|
|
|
+ .build());
|
|
|
+ log.info("dataList, {}", JSON.toJSONString(dataList));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 刷新排序号, 并更新数据版本
|
|
|
+ private void _test0912() {
|
|
|
+ String appType = "APP_YQY0OH7953OKBTM57PLL";
|
|
|
+ String systemToken = "PGC66MB1H2RLXMFQ7XKW4BC3BDFJ2UDM909XL18";
|
|
|
+
|
|
|
+ List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
|
|
|
+ .appType(appType)
|
|
|
+ .systemToken(systemToken)
|
|
|
+ .formUuid("FORM-7A52930D0E834522AD65A4CFE2C0818F1KQO")
|
|
|
+ .build());
|
|
|
+
|
|
|
+ dataList.forEach(item -> {
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .appType(appType)
|
|
|
+ .systemToken(systemToken)
|
|
|
+ .formInstanceId(String.valueOf(item.get("formInstanceId")))
|
|
|
+ .updateFormDataJson(JSON.toJSONString(UtilMap.empty()))
|
|
|
+ .useLatestVersion(true)
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
/************************************* 0906 产品需求导入逻辑变革, 弃用保留 *************************************/
|
|
|
-
|
|
|
+
|
|
|
@Override
|
|
|
public Map checkImportData(Map data) {
|
|
|
List<Map> dataList = UtilMap.getList(data, "dataList");
|
|
@@ -105,7 +630,7 @@ public class AWYDImplClient implements AWYDClient {
|
|
|
}
|
|
|
}
|
|
|
if (fno == no) {
|
|
|
- errmsg = errmsg + "需求编号于父需求编号不能相同;";
|
|
|
+ errmsg = errmsg + "需求编号与父需求编号不能相同;";
|
|
|
}
|
|
|
dataList.get(i).put("selectField_lr4y2xcj", cj + "级");
|
|
|
if (String.valueOf(item.get("multiSelectField_lw678e43")).length() > 0) {
|