|
@@ -27,11 +27,7 @@ import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.time.LocalDateTime;
|
|
|
|
-import java.time.format.DateTimeFormatter;
|
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
-import java.util.regex.Matcher;
|
|
|
|
-import java.util.regex.Pattern;
|
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
@Service
|
|
@@ -1723,39 +1719,29 @@ public class AWImplClient implements AWClint {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
- * 提供verifier数据读取服务
|
|
|
|
|
|
+ * 获取主数据中产品列表
|
|
*/
|
|
*/
|
|
- @Override
|
|
|
|
- public List<Map> syncVerifier(String projectCode) {
|
|
|
|
- List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
- .formUuid("FORM-23B67983E91C4ED3B063F9B629D6E964SGHH")
|
|
|
|
- .searchCondition(JSON.toJSONString(UtilMap.map("textField_lt6xd8lm", projectCode)))
|
|
|
|
- .build());
|
|
|
|
-
|
|
|
|
- return dataList.stream().map(item -> {
|
|
|
|
- return item;
|
|
|
|
- }).collect(Collectors.toList());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
public List<Map> getProductList(String projectId, String q) {
|
|
public List<Map> getProductList(String projectId, String q) {
|
|
- // 获取主数据中产品列表
|
|
|
|
return getProductData(projectId, q, "textField_lhsxurnt", null);
|
|
return getProductData(projectId, q, "textField_lhsxurnt", null);
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 获取主数据中产品版本
|
|
|
|
+ */
|
|
@Override
|
|
@Override
|
|
public List<Map> getProductList(String projectId, String q, String taskId) {
|
|
public List<Map> getProductList(String projectId, String q, String taskId) {
|
|
Map taskData = _getTaskFieldMap(taskId, AWServer.TASK_PRODUCT);
|
|
Map taskData = _getTaskFieldMap(taskId, AWServer.TASK_PRODUCT);
|
|
// Map rTask = UtilMap.getMap(taskData, "task");
|
|
// Map rTask = UtilMap.getMap(taskData, "task");
|
|
String tCode = UtilMap.getString(taskData, AWServer.TASK_PRODUCT);
|
|
String tCode = UtilMap.getString(taskData, AWServer.TASK_PRODUCT);
|
|
McException.assertAccessException(StringUtils.isBlank(tCode), "请先选择产品型号!");
|
|
McException.assertAccessException(StringUtils.isBlank(tCode), "请先选择产品型号!");
|
|
- // 获取主数据中产品版本
|
|
|
|
return getProductData(projectId, q, "textField_lo2ludkv", tCode);
|
|
return getProductData(projectId, q, "textField_lo2ludkv", tCode);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 选择产品\版本后, 回调更新对应原文本字段, 兼容之前字段逻辑
|
|
|
|
+ */
|
|
@Override
|
|
@Override
|
|
public void custFieldUpdate(JSONObject data) {
|
|
public void custFieldUpdate(JSONObject data) {
|
|
List<Map> list = tbClient.queryTaskDetail(data.getString("taskId"), "", "");
|
|
List<Map> list = tbClient.queryTaskDetail(data.getString("taskId"), "", "");
|
|
@@ -1783,233 +1769,7 @@ 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();
|
|
|
|
- Map<String,String> instIdList=new HashMap<>();
|
|
|
|
- for (int j = 0; j < list.size(); j++) {
|
|
|
|
- Map item=list.get(j);
|
|
|
|
- instIdList.put(UtilMap.getString(item,"textField_lt2d2x79"),UtilMap.getString(item,"instanceId"));
|
|
|
|
- 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(category+fno)) {
|
|
|
|
- // 导入数据前父需求编号不存在
|
|
|
|
- if(!charterMap.containsKey(getCode(UtilMap.getString(item,"textField_m0afm8pd")))){
|
|
|
|
- errmsg = errmsg + "父需求编号数据不存在;";
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (fno == no) {
|
|
|
|
- errmsg = errmsg + "需求编号于父需求编号不能相同;";
|
|
|
|
- }
|
|
|
|
- dataList.get(i).put("selectField_lr4y2xcj",cj + "级");
|
|
|
|
- if(String.valueOf(item.get("multiSelectField_lw678e43")).length()>0){
|
|
|
|
- List multi=UtilMap.getList(item,"multiSelectField_lw678e43");
|
|
|
|
- dataList.get(i).put("multiSelectField_lw678e43_str",multi==null||multi.size()<1?"":String.join(",",multi));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- 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,instIdList.get(no)));
|
|
|
|
- dataList.get(i).put("textField_lyqprdyf",codeNo); // 序号
|
|
|
|
- }else{
|
|
|
|
- // 新增
|
|
|
|
- String category=UtilMap.getString(item,"selectField_lronu2g3");
|
|
|
|
- String categoryNew = category.split("(")[1].replace(")", "");
|
|
|
|
- no = noCP(UtilMap.getString(item,"textField_lt2d2x79"), categoryNew);
|
|
|
|
- String fno = "";
|
|
|
|
- int level = getSize(no);
|
|
|
|
- dataList.get(i).put("selectField_lr4y2xcj",level + "级");
|
|
|
|
- // 根据层级查询序号
|
|
|
|
- String noNew="";
|
|
|
|
- // 处理结果
|
|
|
|
- if(level>1){
|
|
|
|
- fno=getCodeNo(categoryNew,noCP(UtilMap.getString(item,"textField_m0afm8pd"), categoryNew));
|
|
|
|
- }
|
|
|
|
- Map reMap=getMaxValue(list,level + "级",category,fno);
|
|
|
|
- if(reMap!=null){
|
|
|
|
- String id=UtilMap.getString(reMap,"id");
|
|
|
|
- noNew=incrementLastPart(id);
|
|
|
|
- }else{
|
|
|
|
- noNew=level==1?categoryNew+"001":fno+".1";
|
|
|
|
- }
|
|
|
|
- codeNo=noNew;
|
|
|
|
- fno=getFnoValue(list,fno);
|
|
|
|
- String nowTime= LocalDateTime.now().format(DateTimeFormatter.ofPattern("MMddHHmmssS"));
|
|
|
|
- dataList.get(i).put("textField_lt2d2x79",noNew+"_"+nowTime);
|
|
|
|
- dataList.get(i).put("textField_m0afm8pd",fno);
|
|
|
|
- dataList.get(i).put("textField_lyqprdyf",codeNo); // 序号
|
|
|
|
- // 拼装数据并新增需求
|
|
|
|
- Map mapNew=dataList.get(i);
|
|
|
|
- mapNew.put("textField_lth2h04b",charter);
|
|
|
|
- mapNew.put("radioField_lroozhse","是");
|
|
|
|
- mapNew.put("textField_m0m3dyk4",fno);
|
|
|
|
- mapNew.put("textField_lyqpt99s",codeNo);
|
|
|
|
- mapNew.put("radioField_m0ow50wn","是"); // 是否草稿
|
|
|
|
- String id=(String) ydClient.operateData(YDParam.builder().appType("APP_YQY0OH7953OKBTM57PLL")
|
|
|
|
- .systemToken("PGC66MB1H2RLXMFQ7XKW4BC3BDFJ2UDM909XL18")
|
|
|
|
- .formUuid("FORM-7A52930D0E834522AD65A4CFE2C0818F1KQO")
|
|
|
|
- .formDataJson(JSONObject.toJSONString(mapNew))
|
|
|
|
- .build(), YDConf.FORM_OPERATION.create);
|
|
|
|
- dataList.get(i).put("associationFormField_lvy7yjq8",getAss(noNew+"_"+nowTime,id));
|
|
|
|
- mapNew.put("instanceId",id);
|
|
|
|
- mapNew.put("id",codeNo);
|
|
|
|
- list.add(mapNew);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return UtilMap.map("data, flag", dataList,flag);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static String incrementLastPart(String input) {
|
|
|
|
- // 查找最后一个点号的位置
|
|
|
|
- int lastDotIndex = input.lastIndexOf('.');
|
|
|
|
- // 如果没有点号,则整个字符串都需要加1
|
|
|
|
- if (lastDotIndex == -1) {
|
|
|
|
- String q=input.substring(0,input.length()-3);
|
|
|
|
- String h=input.substring(input.length()-3);
|
|
|
|
- return q+String.format("%03d",Integer.parseInt(h)+1);
|
|
|
|
- }
|
|
|
|
- // 分割字符串
|
|
|
|
- String prefix = input.substring(0, lastDotIndex + 1);
|
|
|
|
- String lastPart = input.substring(lastDotIndex + 1);
|
|
|
|
- // 对最后一部分加1
|
|
|
|
- String incrementedLastPart = incrementPart(lastPart);
|
|
|
|
- // 返回拼接后的结果
|
|
|
|
- return prefix + incrementedLastPart;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static String incrementPart(String part) {
|
|
|
|
- // 将字符串转换为整数并加1
|
|
|
|
- int number = Integer.parseInt(part);
|
|
|
|
- number++;
|
|
|
|
- // 将整数转换回字符串
|
|
|
|
- return String.valueOf(number);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private static String getCodeNo(String category,String no){
|
|
|
|
- int dotIndex = no.indexOf('.');
|
|
|
|
- String beforeDot = dotIndex == -1 ? no : no.substring(0, dotIndex);
|
|
|
|
- String afterDot = dotIndex == -1 ? "" : no.substring(dotIndex);
|
|
|
|
- // 对第一部分进行补零
|
|
|
|
- String paddedBeforeDot = String.format("%03d", Integer.parseInt(beforeDot));
|
|
|
|
- return category+paddedBeforeDot + afterDot;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private String getFnoValue(List<Map> list, String fno){
|
|
|
|
- if(StringUtils.isBlank(fno)){
|
|
|
|
- return "";
|
|
|
|
- }
|
|
|
|
- List<Map> list1=list.stream()
|
|
|
|
- .filter(map -> UtilMap.getString(map, "textField_lt2d2x79").contains(fno+"_")).collect(Collectors.toList()); // 父编号查询编号
|
|
|
|
- if(list1!=null&&list1.size()>0){
|
|
|
|
- return UtilMap.getString(list1.get(0),"textField_lt2d2x79");
|
|
|
|
- }
|
|
|
|
- return "";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private Map getMaxValue(List<Map> list, String level, String category,String fno){
|
|
|
|
- // 查找符合条件的最大 id
|
|
|
|
- List<Map> list1=list.stream()
|
|
|
|
- .filter(map -> UtilMap.getString(map, "selectField_lr4y2xcj").equals(level)) // 层级
|
|
|
|
- .filter(map -> UtilMap.getString(map, "textField_lt2d2x79").contains(fno)) // 父编号查询编号
|
|
|
|
- .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) {
|
|
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);
|
|
YDSearch ytbProjectId = new YDSearch("textField_lqxtykce", projectId, "TB项目编号", YDSearch.Type.TEXT_FIELD, YDSearch.Operator.EQ);
|
|
@@ -2047,11 +1807,87 @@ public class AWImplClient implements AWClint {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 检查项导出, 全部检查项左关联已提交数据 [ ppExt 已提交数据作为查询条件, 只能筛选已提交数据, 因此提供全量导出 ]
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public void exportCheckList(String pCode, String proType) {
|
|
|
|
+ List<Map> checkedList = _getCheckedList(pCode);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 查询全部检查项提交数据
|
|
|
|
+ List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
+ .formUuid(_matchFormUuid("CHECK"))
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("multiSelectField_ltwjre9s, radioField_lrnddfq6", Arrays.asList(proType), "启用")))
|
|
|
|
+ .dynamicOrder(JSON.toJSONString(UtilMap.map("selectField_lrncf4hk", "+")))
|
|
|
|
+ .build());
|
|
|
|
+ // 匹配已提交检查项生数据
|
|
|
|
+ List<Map> unionList = new ArrayList<>();
|
|
|
|
+ for (Map check : dataList) {
|
|
|
|
+ // 任务编号一致, 检查项唯一标识一致
|
|
|
|
+ List<Map> match = checkedList.stream().filter(item ->
|
|
|
|
+ {
|
|
|
|
+ Map unique = (Map) UtilMap.getList(UtilMap.getMap(item, "main"), "associationFormField_lrrnem5r_id").get(0);
|
|
|
|
+ return item.get("selectField_lqxuswzd").equals(check.get("selectField_lrncf4hk")) && check.get("textField_lrnd3h0r").equals(unique.get("title"));
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ // 多条重复提交如何处理
|
|
|
|
+ if (match.size() > 0) {
|
|
|
|
+ // match 匹配已提交件数据, match.main 为已提交数据主表内容
|
|
|
|
+ match.forEach(item -> {
|
|
|
|
+ check.put("match", item);
|
|
|
|
+ unionList.add(check);
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ unionList.add(check);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ log.info("检查项数据: {}", unionList.size());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /// 查询项目已提交全部检查项数据
|
|
|
|
+ List<Map> _getCheckedList(String pCode) {
|
|
|
|
+ List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
+ .formUuid(_matchFormUuid("RECORD"))
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("selectField_lqxuswze", pCode)))
|
|
|
|
+ .build());
|
|
|
|
+ dataList = dataList.stream().filter(item -> pCode.equals(item.get("selectField_lqxuswze"))).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ List<Map> checkedList = new ArrayList<>();
|
|
|
|
+ for (Map record : dataList) {
|
|
|
|
+ // 检查项清单[明细默认只返回前50]
|
|
|
|
+ List<Map> details = UtilMap.getList(record, "tableField_lqxxgj4s");
|
|
|
|
+ if (details.size() == YDConf.PAGE_SIZE_DETAILS) {
|
|
|
|
+ details = ydService.queryDetails(YDParam.builder()
|
|
|
|
+ .formUuid(_matchFormUuid("RECORD"))
|
|
|
|
+ .formInstanceId(UtilMap.getString(record, "instanceId"))
|
|
|
|
+ .tableFieldId("tableField_lqxxgj4s")
|
|
|
|
+ .build());
|
|
|
|
+ // 过滤空数据, 无检查项目关联数据
|
|
|
|
+ details = details.stream().filter(item -> ObjectUtil.isNotNull(item) && StringUtils.isNotBlank(UtilMap.getString(item, "associationFormField_lrrnem5r_id")))
|
|
|
|
+ .map(item -> {
|
|
|
|
+ // 合并主笔数据
|
|
|
|
+ item.put("main", record);
|
|
|
|
+ item.put("associationFormField_lrrnem5r", JSON.parse(String.valueOf(JSON.parse(UtilMap.getString(item, "associationFormField_lrrnem5r_id")))));
|
|
|
|
+ return item;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ }
|
|
|
|
+ checkedList.addAll(details);
|
|
|
|
+ log.info("检查项清单, {}", details.size());
|
|
|
|
+ }
|
|
|
|
+ return checkedList;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
/************************************* ------------------- *************************************/
|
|
/************************************* ------------------- *************************************/
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void test() {
|
|
public void test() {
|
|
- approveVersion("659a681d44ade3345fdc0d39", "99999");
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ exportCheckList("A2453", "产品开发项目");
|
|
|
|
+
|
|
|
|
+// approveVersion("659a681d44ade3345fdc0d39", "99999");
|
|
//
|
|
//
|
|
// String pCode = "99999";
|
|
// String pCode = "99999";
|
|
// String pCode = "A240407DryRun";
|
|
// String pCode = "A240407DryRun";
|