|
|
@ -0,0 +1,464 @@
|
|
|
|
|
|
|
|
<%@ page import="com.wbi.util.ParamUtil" %>
|
|
|
|
|
|
|
|
<%@ page import="weaver.conn.RecordSet" %>
|
|
|
|
|
|
|
|
<%@ page import="weaver.workflow.workflow.WorkflowComInfo" %>
|
|
|
|
|
|
|
|
<%@ page import="weaver.workflow.workflow.WorkflowBillComInfo" %>
|
|
|
|
|
|
|
|
<%@ page import="weaver.conn.BatchRecordSet" %>
|
|
|
|
|
|
|
|
<%@ page import="weaver.general.StringUtil" %>
|
|
|
|
|
|
|
|
<%@ page import="weaver.general.Util" %>
|
|
|
|
|
|
|
|
<%@ page import="org.slf4j.LoggerFactory" %>
|
|
|
|
|
|
|
|
<%@ page import="org.slf4j.Logger" %>
|
|
|
|
|
|
|
|
<%@ page import="java.util.*" %>
|
|
|
|
|
|
|
|
<%@ page import="weaver.hrm.HrmUserVarify" %>
|
|
|
|
|
|
|
|
<%@page contentType="text/html; charset=UTF-8" %>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<%
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Logger log = LoggerFactory.getLogger("CustomBusiness");
|
|
|
|
|
|
|
|
Map<String, Object> param = ParamUtil.request2Map(request);
|
|
|
|
|
|
|
|
String requestid = Util.null2String(param.get("requestid"));
|
|
|
|
|
|
|
|
String workflowid = Util.null2String(param.get("workflowid"));
|
|
|
|
|
|
|
|
Object formid = param.get("formid");
|
|
|
|
|
|
|
|
Object nodeid = param.get("nodeid");
|
|
|
|
|
|
|
|
log.info("requestparam:{}", param);
|
|
|
|
|
|
|
|
HashMap<String, String> newFieldInfo = new HashMap<>();
|
|
|
|
|
|
|
|
HashMap<String, String> oldFieldInfo = new HashMap<>();
|
|
|
|
|
|
|
|
int userid = HrmUserVarify.getUser(request, response).getUID();
|
|
|
|
|
|
|
|
String clientIp = getClientIp(request);
|
|
|
|
|
|
|
|
String newRequestName = "";
|
|
|
|
|
|
|
|
//判断下是否需要修改流程标题
|
|
|
|
|
|
|
|
if (!StringUtil.isEmpty(Util.null2String(param.get("field_requestName")))){
|
|
|
|
|
|
|
|
newRequestName = Util.null2String(param.get("field_requestName"));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//将字段信息封装进fieldInfo
|
|
|
|
|
|
|
|
param.forEach((k, v) -> {
|
|
|
|
|
|
|
|
if (k.startsWith("field_")) {
|
|
|
|
|
|
|
|
String fieldName = k.split("_")[1];
|
|
|
|
|
|
|
|
if (!"requestName".equals(fieldName)){
|
|
|
|
|
|
|
|
newFieldInfo.put(fieldName, Util.null2String(v));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HashMap<Object, Object> map = new HashMap<>();
|
|
|
|
|
|
|
|
map.put("requestid", requestid);
|
|
|
|
|
|
|
|
map.put("workflowid", workflowid);
|
|
|
|
|
|
|
|
map.put("formid", formid);
|
|
|
|
|
|
|
|
map.put("nodeid", nodeid);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//获取表单名称
|
|
|
|
|
|
|
|
WorkflowComInfo wf = new WorkflowComInfo();
|
|
|
|
|
|
|
|
WorkflowBillComInfo wcInfo = new WorkflowBillComInfo();
|
|
|
|
|
|
|
|
String formId = wf.getFormId(workflowid);
|
|
|
|
|
|
|
|
String tablename = wcInfo.getTablename(formId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 查询数据,记录原始数据;
|
|
|
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
|
|
|
rs.executeQuery("select * from " + tablename + " where requestid = ? ", requestid);
|
|
|
|
|
|
|
|
log.info("查询数据sql:select * from " + tablename + " where requestid = {} ", requestid);
|
|
|
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
|
|
|
for (String fieldName : newFieldInfo.keySet()) {
|
|
|
|
|
|
|
|
String oldValue = rs.getString(fieldName);
|
|
|
|
|
|
|
|
oldFieldInfo.put(fieldName, oldValue);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//更新主流程表单数据 -- start
|
|
|
|
|
|
|
|
ArrayList<String> updateParam = new ArrayList<>();
|
|
|
|
|
|
|
|
ArrayList<String> updateField = new ArrayList<>();
|
|
|
|
|
|
|
|
for (String fieldName : newFieldInfo.keySet()) {
|
|
|
|
|
|
|
|
updateField.add(fieldName + " = ? ");
|
|
|
|
|
|
|
|
updateParam.add(newFieldInfo.get(fieldName));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
updateParam.add(requestid);
|
|
|
|
|
|
|
|
String updateFormSql = String.format(" UPDATE %s SET %s WHERE requestid = ? ", tablename, String.join(",", updateField));
|
|
|
|
|
|
|
|
log.info("updateFormSql:{}", updateFormSql);
|
|
|
|
|
|
|
|
log.info("updateParam.toArray():{}", updateParam.toArray());
|
|
|
|
|
|
|
|
rs.executeUpdate(updateFormSql, updateParam.toArray());
|
|
|
|
|
|
|
|
log.info("updateFormSql.getExceptionMsg:{}", rs.getExceptionMsg());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//记录日志
|
|
|
|
|
|
|
|
String maxid = insertMainReqLog(requestid, oldFieldInfo, updateFormSql, updateParam ,userid,clientIp);
|
|
|
|
|
|
|
|
//更新主流程表单数据 -- end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 开始处理子流程数据 -- start
|
|
|
|
|
|
|
|
//查询出当前流程的所有子流程
|
|
|
|
|
|
|
|
//获取当前流程的子流程
|
|
|
|
|
|
|
|
//封装一个map,key为流程id,value为请求id的List
|
|
|
|
|
|
|
|
HashMap<String, List<String>> wfid_subrequestidMap = new HashMap<>();
|
|
|
|
|
|
|
|
HashMap<String, List<String>> subrequestid_wfidMap = new HashMap<>();
|
|
|
|
|
|
|
|
// rs.executeQuery("select * from WORKFLOW_REQUESTBASE where MAINREQUESTID = ?", requestid);
|
|
|
|
|
|
|
|
// while (rs.next()) {
|
|
|
|
|
|
|
|
// String subworkflowid = rs.getString("WORKFLOWID");
|
|
|
|
|
|
|
|
// if (wfid_subrequestidMap.get(subworkflowid) == null) {
|
|
|
|
|
|
|
|
// ArrayList<String> subrequestids = new ArrayList<>();
|
|
|
|
|
|
|
|
// subrequestids.add(rs.getString("REQUESTID"));
|
|
|
|
|
|
|
|
// wfid_subrequestidMap.put(subworkflowid, subrequestids);
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// wfid_subrequestidMap.get(subworkflowid).add(rs.getString("REQUESTID"));
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getAllSubReqs(requestid,workflowid,wfid_subrequestidMap);
|
|
|
|
|
|
|
|
log.info("wfid_subrequestidMap:{}", wfid_subrequestidMap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String sep = Util.getSeparator() + "";
|
|
|
|
|
|
|
|
BatchRecordSet batchRecordSet = new BatchRecordSet();
|
|
|
|
|
|
|
|
ArrayList<String> updateSetfield = null;
|
|
|
|
|
|
|
|
for (String wfkey : wfid_subrequestidMap.keySet()) {
|
|
|
|
|
|
|
|
String[] key = wfkey.split("_");
|
|
|
|
|
|
|
|
// String mainwfid = sp[0];
|
|
|
|
|
|
|
|
String subwfid = key[key.length-1];
|
|
|
|
|
|
|
|
String subformId = wf.getFormId(subwfid);
|
|
|
|
|
|
|
|
String subTablename = wcInfo.getTablename(subformId);
|
|
|
|
|
|
|
|
updateField = new ArrayList<>();
|
|
|
|
|
|
|
|
updateSetfield = new ArrayList<>();
|
|
|
|
|
|
|
|
String updateParamStr = "";
|
|
|
|
|
|
|
|
// 查询当前流程和子流程的字段对应关系
|
|
|
|
|
|
|
|
Map<String, String> fieldSetInfo = getFieldSetInfo(wfkey,newFieldInfo);
|
|
|
|
|
|
|
|
log.info("fieldSetInfo:{}", fieldSetInfo);
|
|
|
|
|
|
|
|
for (String fieldName : newFieldInfo.keySet()) {
|
|
|
|
|
|
|
|
if (fieldSetInfo.get(fieldName) != null) {
|
|
|
|
|
|
|
|
String subfieldName = fieldSetInfo.get(fieldName);
|
|
|
|
|
|
|
|
updateField.add(subfieldName + " = ?");
|
|
|
|
|
|
|
|
updateSetfield.add(subfieldName);
|
|
|
|
|
|
|
|
if (StringUtil.isEmpty(updateParamStr)) {
|
|
|
|
|
|
|
|
updateParamStr = newFieldInfo.get(fieldName);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
updateParamStr += sep + newFieldInfo.get(fieldName);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (updateSetfield.size() == 0 ){
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
String updateSubReqFormSql = String.format(" UPDATE %s SET %s WHERE requestid = ? ", subTablename, String.join(",", updateField));
|
|
|
|
|
|
|
|
log.info("updateSubReqFormSql:{}", updateSubReqFormSql);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//开始处理子流程
|
|
|
|
|
|
|
|
String updateSetfieldStr = String.join(",", updateSetfield);
|
|
|
|
|
|
|
|
ArrayList<String> updateParamList = new ArrayList<>();
|
|
|
|
|
|
|
|
List<String> subrequestids = wfid_subrequestidMap.get(wfkey);
|
|
|
|
|
|
|
|
log.info("subrequestids:{}",subrequestids);
|
|
|
|
|
|
|
|
HashMap<String, String> reqid_oldValueMap = new HashMap<>();
|
|
|
|
|
|
|
|
for (String subrequestid : subrequestids) {
|
|
|
|
|
|
|
|
// 查询下原始数据
|
|
|
|
|
|
|
|
String oldValueStr = "";
|
|
|
|
|
|
|
|
rs.executeQuery("select " + updateSetfieldStr + "from "+subTablename+" where requestid = ? ", subrequestid);
|
|
|
|
|
|
|
|
rs.next();
|
|
|
|
|
|
|
|
for (String field : updateSetfield) {
|
|
|
|
|
|
|
|
if (StringUtil.isEmpty(oldValueStr)) {
|
|
|
|
|
|
|
|
oldValueStr = field + "=" + rs.getString(field);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
oldValueStr += "," + field + "=" + rs.getString(field);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
reqid_oldValueMap.put(subrequestid,oldValueStr);
|
|
|
|
|
|
|
|
//更新字段参数
|
|
|
|
|
|
|
|
String paramStr = updateParamStr + sep + subrequestid;
|
|
|
|
|
|
|
|
log.info("paramStr:{}", paramStr);
|
|
|
|
|
|
|
|
updateParamList.add(paramStr);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
batchRecordSet.executeSqlBatchNew(updateSubReqFormSql, updateParamList);
|
|
|
|
|
|
|
|
insertsubReqLog(maxid,reqid_oldValueMap,updateSubReqFormSql,updateParamList,batchRecordSet);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// out.print(rs.getMsg());
|
|
|
|
|
|
|
|
//表单字段处理结束,开始处理流程标题
|
|
|
|
|
|
|
|
if(!StringUtil.isEmpty(newRequestName)){
|
|
|
|
|
|
|
|
updateRequestNameAllReq(newRequestName,requestid,wfid_subrequestidMap,maxid);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
%>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<%!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//更新涉及到的流程的流程标题
|
|
|
|
|
|
|
|
private void updateRequestNameAllReq(String newRequestName, String requestid, HashMap<String, List<String>> wfid_subrequestidMap, String maxid) {
|
|
|
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
|
|
|
//用于记录插入日志表的字符串参数list
|
|
|
|
|
|
|
|
ArrayList<String> logParamStrs = new ArrayList<>();
|
|
|
|
|
|
|
|
//主要更新workflow_requestBase的字段
|
|
|
|
|
|
|
|
//REQUESTNAME ,REQUESTNAMENEW,REQUESTNAMEHTMLNEW
|
|
|
|
|
|
|
|
// 先更新主流程
|
|
|
|
|
|
|
|
//更新主流程RequestName
|
|
|
|
|
|
|
|
updateRequestNameByRequestId(newRequestName,requestid,maxid,rs,logParamStrs);
|
|
|
|
|
|
|
|
//开始更新子流程
|
|
|
|
|
|
|
|
for (List<String> value : wfid_subrequestidMap.values()) {
|
|
|
|
|
|
|
|
for (String subreqid : value) {
|
|
|
|
|
|
|
|
updateRequestNameByRequestId(newRequestName,subreqid,maxid,rs,logParamStrs);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String sql = "insert into uf_updateFormLog_dt1 (mainid,lcid,xgqdz,xgsql,sqlcs) values (?,?,?,?,?) ";
|
|
|
|
|
|
|
|
BatchRecordSet batchRecordSet = new BatchRecordSet();
|
|
|
|
|
|
|
|
boolean b = batchRecordSet.executeSqlBatchNew(sql, logParamStrs);
|
|
|
|
|
|
|
|
log.info("updateRequestNameAllReq.executeSqlBatchNew.result:{}",b);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void updateRequestNameByRequestId(String newRequestName, String requestid,String maxid, RecordSet rs, ArrayList<String> logParamStrs) {
|
|
|
|
|
|
|
|
log.info("updateRequestNameByRequestId:requestid:{}",requestid);
|
|
|
|
|
|
|
|
rs.executeQuery("select REQUESTNAME ,REQUESTNAMENEW,REQUESTNAMEHTMLNEW from workflow_requestBase where requestid = ?" , requestid);
|
|
|
|
|
|
|
|
rs.next();
|
|
|
|
|
|
|
|
String requestname = Util.null2String(rs.getString("REQUESTNAME"));
|
|
|
|
|
|
|
|
String requestnamenew = Util.null2String(rs.getString("REQUESTNAMENEW"));
|
|
|
|
|
|
|
|
String requestnamehtmlnew = Util.null2String(rs.getString("REQUESTNAMEHTMLNEW"));
|
|
|
|
|
|
|
|
// 通过字符串替换获取新的标题
|
|
|
|
|
|
|
|
String update_requestnamenew = requestnamenew.replaceAll(requestname, newRequestName);
|
|
|
|
|
|
|
|
String update_requestnamehtmlnew = requestnamehtmlnew.replaceAll(requestname, newRequestName);
|
|
|
|
|
|
|
|
String updateSql = "update workflow_requestBase set REQUESTNAME = ? ,REQUESTNAMENEW = ? ,REQUESTNAMEHTMLNEW = ? where requestid = ?";
|
|
|
|
|
|
|
|
rs.executeUpdate(updateSql,newRequestName,update_requestnamenew,update_requestnamehtmlnew,requestid);
|
|
|
|
|
|
|
|
//拼接日志表的参数
|
|
|
|
|
|
|
|
String sep = Util.getSeparator() + "";
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
String param = maxid
|
|
|
|
|
|
|
|
+ sep + requestid
|
|
|
|
|
|
|
|
+ sep + "requestname:"+requestname + ",requestnamenew:"+requestnamenew+",requestnamehtmlnew"+requestnamehtmlnew
|
|
|
|
|
|
|
|
+ sep + updateSql
|
|
|
|
|
|
|
|
+ sep + newRequestName +"|"+ update_requestnamenew +"|"+ update_requestnamehtmlnew+"|"+requestid;
|
|
|
|
|
|
|
|
logParamStrs.add(param);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void insertsubReqLog(String maxid, HashMap<String, String> reqid_oldValueMap, String updateFormSql, ArrayList<String> updateParam, BatchRecordSet batchRecordSet) {
|
|
|
|
|
|
|
|
log.info("insertsubReqLog:maxid:{}",maxid);
|
|
|
|
|
|
|
|
// RecordSet rs = new RecordSet();
|
|
|
|
|
|
|
|
String sql = "insert into uf_updateFormLog_dt1 (mainid,lcid,xgqdz,xgsql,sqlcs) values (?,?,?,?,?) ";
|
|
|
|
|
|
|
|
String sep = Util.getSeparator() + "";
|
|
|
|
|
|
|
|
ArrayList<String> insertParam = new ArrayList<>();
|
|
|
|
|
|
|
|
for (String paramStr : updateParam) {
|
|
|
|
|
|
|
|
String reqid = paramStr.substring(paramStr.lastIndexOf(sep) + 1);
|
|
|
|
|
|
|
|
String oldValue = reqid_oldValueMap.get(reqid);
|
|
|
|
|
|
|
|
String noSepParamStr = paramStr.replaceAll(sep,"|");
|
|
|
|
|
|
|
|
String insertParamStr = maxid + sep + reqid + sep + oldValue + sep + updateFormSql + sep + noSepParamStr;
|
|
|
|
|
|
|
|
insertParam.add(insertParamStr);
|
|
|
|
|
|
|
|
// rs.executeUpdate(sql,maxid,reqid,oldValue,updateFormSql,paramStr);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.info("insertsubReqLog:insertParam.size:{}",insertParam.size());
|
|
|
|
|
|
|
|
boolean b = batchRecordSet.executeSqlBatchNew(sql, insertParam);
|
|
|
|
|
|
|
|
log.info("batchRecordSet.executeSqlBatchNew.result:{}",b);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String insertMainReqLog(String requestid, HashMap<String, String> oldFieldInfo, String updateFormSql, ArrayList<String> updateParam, int userid, String clientIp) {
|
|
|
|
|
|
|
|
String maxid = "";
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
|
|
|
rs.executeUpdate("insert into uf_updateFormLog (lcid , xgqdz ,xgsql,sqlcs,ip,czr) values (?,?,?,?,?,?)",requestid,oldFieldInfo.toString(),updateFormSql,String.join("|",updateParam),clientIp,userid);
|
|
|
|
|
|
|
|
rs.executeQuery("select max(id) id from uf_updateFormLog ");
|
|
|
|
|
|
|
|
rs.next();
|
|
|
|
|
|
|
|
maxid = Util.null2String(rs.getString("id"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}catch (Exception e){
|
|
|
|
|
|
|
|
log.info("insertMainReqLog:error:{}",e.getMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return maxid;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static Logger log = LoggerFactory.getLogger("CustomBusiness");
|
|
|
|
|
|
|
|
WorkflowComInfo wf = new WorkflowComInfo();
|
|
|
|
|
|
|
|
WorkflowBillComInfo wcInfo = new WorkflowBillComInfo();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Map<String, String> getFieldSetInfo(String wfkey, HashMap<String, String> newFieldInfo) {
|
|
|
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
|
|
|
log.info("getFieldSetInfo:wfkey:{}",wfkey);
|
|
|
|
|
|
|
|
String[] key = wfkey.split("_");
|
|
|
|
|
|
|
|
log.info("getFieldSetInfo:key:{}",wfkey);
|
|
|
|
|
|
|
|
HashMap<String, String> fieldSetInfo = new HashMap<>();
|
|
|
|
|
|
|
|
for (int i = key.length - 1; i >= 1 ; i--) {
|
|
|
|
|
|
|
|
String mainwfid = key[i-1];;
|
|
|
|
|
|
|
|
String subwfid = key[i];
|
|
|
|
|
|
|
|
log.info("mainwfid:{}",mainwfid);
|
|
|
|
|
|
|
|
log.info("subwfid:{}",subwfid);
|
|
|
|
|
|
|
|
String activeVersionID = "";
|
|
|
|
|
|
|
|
rs.executeQuery("select ACTIVEVERSIONID from WORKFLOW_BASE where id = ? ", subwfid);
|
|
|
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
|
|
|
activeVersionID = rs.getString("ACTIVEVERSIONID");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.info("activeVersionID:{}", activeVersionID);
|
|
|
|
|
|
|
|
rs.executeQuery("select * from WORKFLOW_BASE where ACTIVEVERSIONID = ? ", activeVersionID);
|
|
|
|
|
|
|
|
ArrayList<String> subwfids = new ArrayList<>();
|
|
|
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
|
|
|
subwfids.add(rs.getString("id"));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.info("subwfids:{}", subwfids);
|
|
|
|
|
|
|
|
String setid = "";
|
|
|
|
|
|
|
|
rs.executeQuery("select * from workflow_subwfset where MAINWORKFLOWID = ? and SUBWORKFLOWID in ( " + String.join(",", subwfids) + " )", mainwfid);
|
|
|
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
|
|
|
setid = rs.getString("id");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.info("setid:{}", setid);
|
|
|
|
|
|
|
|
rs.executeQuery("select b.FIELDNAME mainwfField,c.FIELDNAME subwfField, " +
|
|
|
|
|
|
|
|
" b.fieldhtmltype mainfieldhtmltype, " +
|
|
|
|
|
|
|
|
" c.fieldhtmltype subfieldhtmltype " +
|
|
|
|
|
|
|
|
" from workflow_subwfsetdetail a left join WORKFLOW_BILLFIELD b " +
|
|
|
|
|
|
|
|
" on a.MAINWORKFLOWFIELDID = b.ID " +
|
|
|
|
|
|
|
|
" left join WORKFLOW_BILLFIELD c " +
|
|
|
|
|
|
|
|
" on a.SUBWORKFLOWFIELDID = c.ID " +
|
|
|
|
|
|
|
|
" where SUBWFSETID = ? ", setid);
|
|
|
|
|
|
|
|
HashMap<String, String> tempfieldSetInfo = new HashMap<>();
|
|
|
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
|
|
|
//todo
|
|
|
|
|
|
|
|
//这里通过fieldhtmltype字段类型判断是否需要更新,如果字段类型不同就忽略,
|
|
|
|
|
|
|
|
//后期需优化,着急上线,先用这个方法简单判断下
|
|
|
|
|
|
|
|
String mainfieldhtmltype = Util.null2String(rs.getString("mainfieldhtmltype"));
|
|
|
|
|
|
|
|
String subfieldhtmltype = Util.null2String(rs.getString("subfieldhtmltype"));
|
|
|
|
|
|
|
|
if (mainfieldhtmltype.equals(subfieldhtmltype)) {
|
|
|
|
|
|
|
|
tempfieldSetInfo.put(rs.getString("mainwfField"), rs.getString("subwfField"));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (fieldSetInfo.size() == 0){
|
|
|
|
|
|
|
|
fieldSetInfo = tempfieldSetInfo;
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
HashMap<String, String> map = new HashMap<>();
|
|
|
|
|
|
|
|
for (String mainwffield : tempfieldSetInfo.keySet()) {
|
|
|
|
|
|
|
|
String subwffield = tempfieldSetInfo.get(mainwffield);
|
|
|
|
|
|
|
|
map.put(mainwffield,fieldSetInfo.get(subwffield));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
fieldSetInfo = map;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.info("getFieldSetInfo:fieldSetInfo:{}",fieldSetInfo);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return fieldSetInfo;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/****
|
|
|
|
|
|
|
|
* 使用递归查询获取当前流程的所有子流程
|
|
|
|
|
|
|
|
* @return key 主流程wfid_子流程wfid value 子流程requestid的list
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
// private static Map<String, List<String>> getAllSubReqs(String requestids, String mainwfId, Map<String, List<String>> wfid_subrequestidMap) {
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// RecordSet rs = new RecordSet();
|
|
|
|
|
|
|
|
// rs.executeQuery("select * from WORKFLOW_REQUESTBASE where MAINREQUESTID in ( "+requestids+" )");
|
|
|
|
|
|
|
|
// int size = wfid_subrequestidMap.size();
|
|
|
|
|
|
|
|
// while (rs.next()) {
|
|
|
|
|
|
|
|
// String subworkflowid = rs.getString("WORKFLOWID");
|
|
|
|
|
|
|
|
// String wfIdKey = mainwfId + "_" + subworkflowid;
|
|
|
|
|
|
|
|
// if (wfid_subrequestidMap.get(wfIdKey) == null) {
|
|
|
|
|
|
|
|
// ArrayList<String> subrequestids = new ArrayList<>();
|
|
|
|
|
|
|
|
// subrequestids.add(rs.getString("REQUESTID"));
|
|
|
|
|
|
|
|
// wfid_subrequestidMap.put(wfIdKey, subrequestids);
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// wfid_subrequestidMap.get(wfIdKey).add(rs.getString("REQUESTID"));
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (size != wfid_subrequestidMap.size()) {
|
|
|
|
|
|
|
|
// for (String wfkey : wfid_subrequestidMap.keySet()) {
|
|
|
|
|
|
|
|
// List<String> subrequestids = wfid_subrequestidMap.get(wfid_subrequestidMap);
|
|
|
|
|
|
|
|
// String join = String.join(",", subrequestids);
|
|
|
|
|
|
|
|
// getAllSubReqs(join,wfkey.split(",")[1],wfid_subrequestidMap);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// return wfid_subrequestidMap;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// public static Map<String, List<String>> getAllSubReqs(String requestids, String mainwfId, Map<String, List<String>> wfid_subrequestidMap) {
|
|
|
|
|
|
|
|
// // 初始化一个队列来处理请求ID和相应的层级key
|
|
|
|
|
|
|
|
// Queue<Map.Entry<String, String>> requestQueue = new LinkedList<>();
|
|
|
|
|
|
|
|
// // 初始化一个集合来追踪已经处理过的工作流路径
|
|
|
|
|
|
|
|
// Set<String> processedKeys = new HashSet<>();
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// // 将初始请求ID和mainwfId放入队列
|
|
|
|
|
|
|
|
// requestQueue.add(new AbstractMap.SimpleEntry<>(requestids, mainwfId));
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// // 开始处理队列中的请求ID
|
|
|
|
|
|
|
|
// while (!requestQueue.isEmpty()) {
|
|
|
|
|
|
|
|
// Map.Entry<String, String> entry = requestQueue.poll();
|
|
|
|
|
|
|
|
// String currentRequestIds = entry.getKey();
|
|
|
|
|
|
|
|
// String currentKey = entry.getValue();
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// processRequests(currentRequestIds, currentKey, wfid_subrequestidMap, processedKeys, requestQueue);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// return wfid_subrequestidMap;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// private static void processRequests(String requestids, String currentKey, Map<String, List<String>> wfid_subrequestidMap, Set<String> processedKeys, Queue<Map.Entry<String, String>> requestQueue) {
|
|
|
|
|
|
|
|
// RecordSet rs = new RecordSet();
|
|
|
|
|
|
|
|
// rs.executeQuery("select * from WORKFLOW_REQUESTBASE where MAINREQUESTID in (" + requestids + ")");
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// // 处理查询结果集并更新映射表
|
|
|
|
|
|
|
|
// while (rs.next()) {
|
|
|
|
|
|
|
|
// String subworkflowid = rs.getString("WORKFLOWID");
|
|
|
|
|
|
|
|
// String newKey = currentKey + "_" + subworkflowid;
|
|
|
|
|
|
|
|
// String requestId = rs.getString("REQUESTID");
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// // 如果该工作流路径还没有被处理过,处理并加入映射表
|
|
|
|
|
|
|
|
// if (!processedKeys.contains(newKey)) {
|
|
|
|
|
|
|
|
// processedKeys.add(newKey);
|
|
|
|
|
|
|
|
// wfid_subrequestidMap.computeIfAbsent(newKey, k -> new ArrayList<>()).add(requestId);
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// // 将新的子请求ID和新生成的key放入队列中以便后续处理
|
|
|
|
|
|
|
|
// requestQueue.add(new AbstractMap.SimpleEntry<>(requestId, newKey));
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// // 如果已经处理过,则只更新映射表中的请求ID列表
|
|
|
|
|
|
|
|
// wfid_subrequestidMap.get(newKey).add(requestId);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static Map<String, List<String>> getAllSubReqs(String requestids, String mainwfId, Map<String, List<String>> wfid_subrequestidMap) {
|
|
|
|
|
|
|
|
// 初始化一个集合来追踪已经处理过的工作流路径
|
|
|
|
|
|
|
|
Set<String> processedKeys = new HashSet<>();
|
|
|
|
|
|
|
|
// 开始递归处理主请求
|
|
|
|
|
|
|
|
processRequests(requestids, mainwfId, wfid_subrequestidMap, processedKeys);
|
|
|
|
|
|
|
|
return wfid_subrequestidMap;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static void processRequests(String requestids, String currentKey, Map<String, List<String>> wfid_subrequestidMap, Set<String> processedKeys) {
|
|
|
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
|
|
|
rs.executeQuery("select * from WORKFLOW_REQUESTBASE where MAINREQUESTID in (" + requestids + ")");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理查询结果集并更新映射表
|
|
|
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
|
|
|
String subworkflowid = rs.getString("WORKFLOWID");
|
|
|
|
|
|
|
|
String newKey = currentKey + "_" + subworkflowid;
|
|
|
|
|
|
|
|
String requestId = rs.getString("REQUESTID");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果该工作流路径还没有被处理过,处理并加入映射表
|
|
|
|
|
|
|
|
if (!processedKeys.contains(newKey)) {
|
|
|
|
|
|
|
|
processedKeys.add(newKey);
|
|
|
|
|
|
|
|
wfid_subrequestidMap.computeIfAbsent(newKey, k -> new ArrayList<>()).add(requestId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 递归处理子请求,构建下一层的key
|
|
|
|
|
|
|
|
processRequests(requestId, newKey, wfid_subrequestidMap, processedKeys);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 如果已经处理过,则只更新映射表中的请求ID列表
|
|
|
|
|
|
|
|
wfid_subrequestidMap.get(newKey).add(requestId);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public static String getClientIp(HttpServletRequest request) {
|
|
|
|
|
|
|
|
String ip = request.getHeader("X-Forwarded-For");
|
|
|
|
|
|
|
|
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
|
|
|
|
|
|
|
|
ip = request.getHeader("Proxy-Client-IP");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
|
|
|
|
|
|
|
|
ip = request.getHeader("WL-Proxy-Client-IP");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
|
|
|
|
|
|
|
|
ip = request.getHeader("HTTP_CLIENT_IP");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
|
|
|
|
|
|
|
|
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
|
|
|
|
|
|
|
|
ip = request.getRemoteAddr();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ip;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
%>
|