You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4596 lines
153 KiB
Java

2 years ago
/*
*
* Copyright (c) 2001-2016 .
* ,.
*
*/
package weaver.ofs.manager;
import com.alibaba.fastjson.JSONObject;
import com.cloudstore.dev.api.bean.MessageBean;
import com.cloudstore.dev.api.bean.MessageType;
import com.cloudstore.dev.api.util.Util_Message;
import com.engine.msgcenter.biz.ConfigManager;
import com.engine.msgcenter.biz.WeaMessageTypeConfig;
import com.google.common.collect.Sets;
import net.sf.json.JSONArray;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.BatchRecordSet;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.resource.ResourceComInfo;
import weaver.integration.cache.OfsSettingCache;
import weaver.integration.logging.Logger;
import weaver.integration.logging.LoggerFactory;
import weaver.ofs.bean.*;
import weaver.ofs.dao.OfsTableName;
import weaver.ofs.manager.remind.*;
import weaver.ofs.service.*;
import weaver.ofs.util.OfsUtils;
import weaver.rtx.RTXConfig;
import weaver.security.util.SecurityMethodUtil;
import weaver.systeminfo.SystemEnv;
import java.io.IOException;
import java.util.*;
import java.util.regex.Pattern;
/**
*
*
* @version 1.0
*/
public class OfsTodoDataManager {
/**
*
*/
private static Logger log = LoggerFactory.getLogger(OfsTodoDataManager.class);
/**
* ID
*/
private static final String SYSADMIN_ID = "1";
/**
* xml
*/
private static final String RESULT_XML_ROOT = "ResultInfo";
/**
* id
*/
private static final int DEFAULT_DATA_ID = 0;//缺省数据id
/**
* 线
*/
private static final String LINK_CHAR = "_";
/**
*
*/
private OfsSettingService ofsSettingService = new OfsSettingService();
/**
*
*/
private OfsTodoDataService ofsTodoDataService = new OfsTodoDataService();
/**
*
*/
private OfsSysInfoService ofsSysInfoService = new OfsSysInfoService();
/**
*
*/
private OfsWorkflowService ofsWorkflowService = new OfsWorkflowService();
/**
*
*/
private OfsLogService ofsLogService = new OfsLogService();
/**
* 访Ip
*/
private String clientIp;//访问Ip
/**
* 访Ip
* @return
*/
public String getClientIp() {
return clientIp;
}
/**
* 访Ip
* @param clientIp
*/
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
/**
*
* @param dataMap
* @return
*/
public Map<String,String> receiveTodoRequestByMap(Map<String,String> dataMap){
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
String requestname = OfsUtils.getStringValueByMapKey(dataMap,"requestname");
String workflowname = OfsUtils.getStringValueByMapKey(dataMap,"workflowname");
String nodename = OfsUtils.getStringValueByMapKey(dataMap,"nodename");
String pcurl = OfsUtils.getStringValueByMapKey(dataMap,"pcurl");
String appurl = OfsUtils.getStringValueByMapKey(dataMap,"appurl");
String createdatetime = OfsUtils.getStringValueByMapKey(dataMap,"createdatetime");
String creator = OfsUtils.getStringValueByMapKey(dataMap,"creator");
String receiver = OfsUtils.getStringValueByMapKey(dataMap,"receiver");
String receivedatetime = OfsUtils.getStringValueByMapKey(dataMap,"receivedatetime");
String receivets = OfsUtils.getStringValueByMapKey(dataMap,"receivets"); //时间戳字段,客户端使用线程调用接口的时候,根据此字段判断是否需要更新数据,防止后发的请求数据被之前的覆盖
//对于未传时间戳的数据,用系统当前时间做时间戳
if("".equals(receivets)){
receivets = String.valueOf(System.currentTimeMillis());
}
return receiveTodoRequest(
syscode,
flowid,
requestname,
workflowname,
nodename,
pcurl,
appurl,
creator,
createdatetime,
receiver,
receivedatetime,
receivets);
}
/**
* (json)
* @param json
* @return
*/
public String receiveTodoRequestByJson(String json){
Map<String,String> dataMap = OfsUtils.jsonToMap(json);
Map<String,String> resultMap = receiveTodoRequestByMap(dataMap);
String resultJson = OfsUtils.mapToJson(resultMap);
return resultJson;
}
/**
* (xml)
* @param xml
* @return
*/
public String receiveTodoRequestByXml(String xml){
xml = SecurityMethodUtil.clearEntity(xml);
Map<String,String> dataMap = OfsUtils.xmlToMap(xml);
Map<String,String> resultMap = receiveTodoRequestByMap(dataMap);
return OfsUtils.mapToXml(resultMap,RESULT_XML_ROOT);
}
/**
*
* @param syscode
* @param flowid
* @param requestname
* @param workflowname
* @param nodename
* @param pcurl
* @param appurl
* @param creator
* @param createdatetime
* @param receiver
* @param receivedatetime
* @param receivets
* @return
*/
public Map<String,String> receiveTodoRequest(
String syscode,
String flowid,
String requestname,
String workflowname,
String nodename,
String pcurl,
String appurl,
String creator,
String createdatetime,
String receiver,
String receivedatetime,
String receivets
){
Map<String, String> resultMap = new HashMap<String, String>();
String isremark = OfsLog.IsRemark_Todo;
String creatorid = "0";
String createdate = "";
String createtime = "";
String receiverid = "0";
String receivedate = "";
String receivetime = "";
//校验时间戳
resultMap = validateReceivets(
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime,receivets);
if(!resultMap.isEmpty()){
return resultMap;
}
//校验创建日期时间
resultMap = validateCreateDateTime(createdatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//校验flowid不能为空
resultMap = validateFlowid(createdatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
createdate = createdatetime.substring(0,10);
createtime = createdatetime.length()>11 ? createdatetime.substring(11):createtime;
//校验接收日期时间
resultMap = validateReceiveDateTime(receivedatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
receivedate = receivedatetime.substring(0,10);
receivetime = receivedatetime.length()>11 ? receivedatetime.substring(11):receivetime;
Map<String,String> OfsSettingMap = ofsSettingService.getOneMap();
String OfsSetting_isuse = OfsUtils.getStringValueByMapKey(OfsSettingMap,"isuse",OfsSetting.IsUse_No);//是否启用统一待办中心状态
//关闭统一待办中心状态
resultMap = validateOfsSettingIsuse(OfsSetting_isuse,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int syscodeCnt = this.ofsSysInfoService.getCnt(syscode);//获取指定异构系统标识的数量
//记录系统日志:异构系统-检测-失败-异构系统标识【XXXX】未注册
resultMap = validateSyscode(syscodeCnt,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
Map<String,String> OfsSysInfoMap = ofsSysInfoService.getOneMap(syscode);
int OfsSysInfo_sysid = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"sysid",OfsSysInfo.Default_SysId);//异构系统id
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人为空
resultMap = validateReceiver(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String OfsSysInfo_HrmTransRule = OfsUtils.getStringValueByMapKey(OfsSysInfoMap, "hrmtransrule");//人员转换规则
creatorid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,creator);
receiverid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,receiver);
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人不存在
resultMap = validateReceiverid(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String OfsSysInfo_securityip = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"securityip");//异构许可ip
//检测当前IP是否在许可IP范围内
resultMap = validateOfsSysInfoSecurityIP(OfsSysInfo_securityip,this.clientIp,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//记录系统日志:流程类型-检测-失败-流程类型未填写
resultMap = validateWorkflowname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//保存失败,记录系统日志:流程数据-检测-失败-流程标题未填写
resultMap = validateRequestname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int OfsSysInfo_receivewfdata = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"receivewfdata",OfsSysInfo.ReceiveWfData_No);//异构系统允许接收流程数据
//异构系统不允许接收流程数据
resultMap = validateOfsSysInfoReceiveWfData(OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int OfsSysInfo_autocreatewftype = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"autocreatewftype",OfsSysInfo.AutoCreateWfType_No);//异构系统自动创建流程类型
int workflownameCnt = ofsWorkflowService.getCnt(OfsSysInfo_sysid,workflowname);//是否新流程类型1旧0新
//异构系统的【自动创建流程类型】关闭 并且 流程类型不存在
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCnt(OfsSysInfo_autocreatewftype,workflownameCnt,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//异构系统的【自动创建流程类型】开启 并且 流程类型不存在,自动新增流程类型
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCntAndAuto(
OfsSysInfo_autocreatewftype, workflownameCnt,OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//根据异构系统id和流程类型名称获取异构系统流程类型信息
Map<String,String> OfsWorkflowMap = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname);
int OfsWorkflow_workflowid = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"workflowid",OfsWorkflow.Default_WorkflowId);//获取异构系统流程类型id
int OfsWorkflow_receivewfdata = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"receivewfdata",OfsWorkflow.ReceiveWfData_No);//接收流程数据
//流程类型不允许接收流程数据
resultMap = validateOfsWorkflowReceiveWfData(OfsWorkflow_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String flowguid = syscode + LINK_CHAR + OfsWorkflow_workflowid + LINK_CHAR + flowid + LINK_CHAR + receiver;
int requestid = ofsTodoDataService.buildRequestid(OfsSysInfo_sysid,OfsWorkflow_workflowid,flowid);
int OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);//主键
String returnMessage = "";
if(OfsTodoData_id == OfsTodoData.Default_TodoDataId){//流程数据不存在
//新增流程数据;
boolean OfsTodoData_insert_flag = ofsTodoDataService.receiveTodoRequest(
syscode,
OfsSysInfo_sysid+"",
requestid+"",
flowid,
flowguid,
requestname,
workflowname,
OfsWorkflow_workflowid+"",
nodename,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,
receivets
);
if(!OfsTodoData_insert_flag){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003832,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003833,weaver.general.ThreadVarLanguage.getLang())+"";
//获取主键
OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,receivets
);
}else{//流程数据存在
//更新 流程数据
boolean OfsTodoData_update_flag = ofsTodoDataService.updateTodoRequest(
OfsTodoData_id+"",
syscode,
OfsSysInfo_sysid+"",
requestid+"",
flowid,
flowguid,
requestname,
workflowname,
OfsWorkflow_workflowid+"",
nodename,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,
receivets
);
if(!OfsTodoData_update_flag){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003834,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003835,weaver.general.ThreadVarLanguage.getLang())+"";
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,receivets
);
}
Map<String, String> msgUrlMap = updatePcurlAndAppurl(pcurl, appurl, OfsSysInfoMap, OfsTodoData_id, flowid);
String OfsSysInfo_sysname = buildSysName(OfsSettingMap,OfsSysInfoMap);//系统显示名称
sendMessage(
OfsSettingMap,
OfsSysInfoMap,
OfsSysInfo_sysname,
workflowname,
requestname,
msgUrlMap.get("pcurl"),
msgUrlMap.get("appurl"),
creatorid,
createdate,
createtime,
receiverid,
receivedate,
receivetime,
OfsTodoData_id,
requestid
);
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Success,
returnMessage
);
}
/**
*
* @param sysid
* @param datatype
* @param opertype
* @param operresult
* @param failremark
* @param syscode
* @param flowid
* @param requestname
* @param workflowname
* @param nodename
* @param isremark
* @param pcurl
* @param appurl
* @param creator
* @param Creatorid
* @param createdate
* @param createtime
* @param receiver
* @param userid
* @param receivedate
* @param receivetime
* @return
*/
private Map<String, String> saveLog(
String sysid,
String datatype,
String opertype,
String operresult,
String failremark,
String syscode,
String flowid,
String requestname,
String workflowname,
String nodename,
String isremark,
String pcurl,
String appurl,
String creator,
String Creatorid,
String createdate,
String createtime,
String receiver,
String userid,
String receivedate,
String receivetime
) {
String data[] = datatype.split("_");
datatype = data[0];
String dataid = data[1];
ofsLogService.insert(
sysid,
datatype,
dataid,
opertype,
operresult,
failremark,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
Creatorid,
createdate,
createtime,
receiver,
userid,
receivedate,
receivetime
);
return buildReceiveTodoRequest(
syscode,
datatype,
opertype,
operresult,
failremark
);
}
/**
* map
* @param syscode
* @param dataType
* @param operType
* @param operResult
* @param message
* @return
*/
private Map<String, String> buildReceiveTodoRequest(
String syscode,
String dataType,
String operType,
String operResult,
String message
) {
Map<String, String> map = new HashMap<String,String>();
map.put("syscode", syscode);
map.put("dataType", dataType);
map.put("operType", operType);
map.put("operResult", operResult);
map.put("message", message);
return map;
}
/**
* (map)
* @param dataMap
* @return
*/
public Map<String,String> receiveRequestInfoByMap (Map<String,String> dataMap){
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
String requestname = OfsUtils.getStringValueByMapKey(dataMap,"requestname");
String workflowname = OfsUtils.getStringValueByMapKey(dataMap,"workflowname");
String nodename = OfsUtils.getStringValueByMapKey(dataMap,"nodename");
String pcurl = OfsUtils.getStringValueByMapKey(dataMap,"pcurl");
String appurl = OfsUtils.getStringValueByMapKey(dataMap,"appurl");
String isremark = OfsUtils.getStringValueByMapKey(dataMap,"isremark");
String viewtype = OfsUtils.getStringValueByMapKey(dataMap,"viewtype");
String createdatetime = OfsUtils.getStringValueByMapKey(dataMap,"createdatetime");
String creator = OfsUtils.getStringValueByMapKey(dataMap,"creator");
String receiver = OfsUtils.getStringValueByMapKey(dataMap,"receiver");
String receivedatetime = OfsUtils.getStringValueByMapKey(dataMap,"receivedatetime");
String receivets = OfsUtils.getStringValueByMapKey(dataMap,"receivets"); //时间戳字段,客户端使用线程调用接口的时候,根据此字段判断是否需要更新数据,防止后发的请求数据被之前的覆盖
//对于未传时间戳的数据,用系统当前时间做时间戳
if("".equals(receivets)){
receivets = String.valueOf(System.currentTimeMillis());
}
return receiveRequestInfo(
syscode,
flowid,
requestname,
workflowname,
nodename,
pcurl,
appurl,
isremark,
viewtype,
creator,
createdatetime,
receiver,
receivedatetime,
receivets);
}
/**
* (map)
* @param dataMap
* @return
*/
public Map<String,String> deleteRequestInfoByMap (Map<String,String> dataMap){
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
return deleteRequestInfo(
syscode,
flowid
);
}
/**
* (json)
* @param json
* @return
*/
public String deleteRequestInfoByJson (String json){
Map<String,String> dataMap = OfsUtils.jsonToMap(json);
Map<String,String> resultMap = deleteRequestInfoByMap(dataMap);
String resultJson = OfsUtils.mapToJson(resultMap);
return resultJson;
}
/**
* (xml)
* @return
*/
public String deleteRequestInfoByXML (String xml){
xml = SecurityMethodUtil.clearEntity(xml);
Map<String,String> dataMap = OfsUtils.xmlToMap(xml);
Map<String,String> resultMap = deleteRequestInfoByMap(dataMap);
return OfsUtils.mapToXml(resultMap,RESULT_XML_ROOT);
}
/**
* (map)
* @param dataMap
* @return
*/
public Map<String,String> deleteUserRequestInfoByMap (Map<String,String> dataMap){
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
String userid=OfsUtils.getStringValueByMapKey(dataMap,"userid");
return deleteUserRequestInfo(
syscode,
flowid,
userid
);
}
/**
* id(json)
* @param json
* @return
*/
public String deleteUserRequestInfoByJson (String json){
Map<String,String> dataMap = OfsUtils.jsonToMap(json);
Map<String,String> resultMap = deleteUserRequestInfoByMap(dataMap);
String resultJson = OfsUtils.mapToJson(resultMap);
return resultJson;
}
/**
* id(xml)
* @param xml
* @return
*/
public String deleteUserRequestInfoByXML (String xml){
xml = SecurityMethodUtil.clearEntity(xml);
Map<String,String> dataMap = OfsUtils.xmlToMap(xml);
Map<String,String> resultMap = deleteUserRequestInfoByMap(dataMap);
return OfsUtils.mapToXml(resultMap,RESULT_XML_ROOT);
}
/**
* (json)
* @param json
* @return
*/
public String receiveRequestInfoByJson (String json){
Map<String,String> dataMap = OfsUtils.jsonToMap(json);
Map<String,String> resultMap = receiveRequestInfoByMap(dataMap);
return OfsUtils.mapToJson(resultMap);
}
/**
* (xml)
* @param xml
* @return
*/
public String receiveRequestInfoByXml (String xml){
xml = SecurityMethodUtil.clearEntity(xml);
Map<String,String> dataMap = OfsUtils.xmlToMap(xml);
Map<String,String> resultMap = receiveRequestInfoByMap(dataMap);
return OfsUtils.mapToXml(resultMap,RESULT_XML_ROOT);
}
/**
*
* @param syscode
* @param flowid
* @param requestname
* @param workflowname
* @param nodename
* @param pcurl
* @param appurl
* @param isremark
* @param viewtype
* @param creator
* @param createdatetime
* @param receiver
* @param receivedatetime
* @param receivets
* @return
*/
public Map<String, String> receiveRequestInfo(
String syscode,
String flowid,
String requestname,
String workflowname,
String nodename,
String pcurl,
String appurl,
String isremark,
String viewtype,
String creator,
String createdatetime,
String receiver,
String receivedatetime,
String receivets
) {
Map<String, String> resultMap = new HashMap<String, String>();
String creatorid = "0";
String createdate = "";
String createtime = "";
String receiverid = "0";
String receivedate = "";
String receivetime = "";
//校验时间戳
resultMap = validateReceivets(
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime,receivets);
if(!resultMap.isEmpty()){
return resultMap;
}
//校验创建日期时间
resultMap = validateCreateDateTime(createdatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//校验flowid不能为空
resultMap = validateFlowid(createdatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
createdate = createdatetime.substring(0,10);
createtime = createdatetime.length()>11 ? createdatetime.substring(11):createtime;
//校验接收日期时间
resultMap = validateReceiveDateTime(receivedatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
receivedate = receivedatetime.substring(0,10);
receivetime = receivedatetime.length()>11 ? receivedatetime.substring(11):receivetime;
Map<String,String> OfsSettingMap = ofsSettingService.getOneMap();
String OfsSetting_isuse = OfsUtils.getStringValueByMapKey(OfsSettingMap,"isuse",OfsSetting.IsUse_No);//是否启用统一待办中心状态
//关闭统一待办中心状态
resultMap = validateOfsSettingIsuse(OfsSetting_isuse,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int syscodeCnt = this.ofsSysInfoService.getCnt(syscode);//获取指定异构系统标识的数量
//记录系统日志:异构系统-检测-失败-异构系统标识【XXXX】未注册
resultMap = validateSyscode(syscodeCnt,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
Map<String,String> OfsSysInfoMap = ofsSysInfoService.getOneMap(syscode);
int OfsSysInfo_sysid = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"sysid",OfsSysInfo.Default_SysId);//异构系统id
//检测isremark不合法
resultMap = validateIsRemark(
syscode, OfsSysInfo_sysid,flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//检查viewtype值是否合法
resultMap = validateViewType(viewtype,
syscode, OfsSysInfo_sysid,flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人为空
resultMap = validateReceiver(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String OfsSysInfo_HrmTransRule = OfsUtils.getStringValueByMapKey(OfsSysInfoMap, "hrmtransrule");//人员转换规则
creatorid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,creator);
receiverid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,receiver);
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人不存在
resultMap = validateReceiverid(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String OfsSysInfo_securityip = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"securityip");//异构许可ip
//检测当前IP是否在许可IP范围内
resultMap = validateOfsSysInfoSecurityIP(OfsSysInfo_securityip,this.clientIp,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//记录系统日志:流程类型-检测-失败-流程类型未填写
resultMap = validateWorkflowname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//保存失败,记录系统日志:流程数据-检测-失败-流程标题未填写
resultMap = validateRequestname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int OfsSysInfo_receivewfdata = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"receivewfdata",OfsSysInfo.ReceiveWfData_No);//异构系统允许接收流程数据
//异构系统不允许接收流程数据
resultMap = validateOfsSysInfoReceiveWfData(OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int OfsSysInfo_autocreatewftype = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"autocreatewftype",OfsSysInfo.AutoCreateWfType_No);//异构系统自动创建流程类型
int workflownameCnt = ofsWorkflowService.getCnt(OfsSysInfo_sysid,workflowname);//是否新流程类型1旧0新
//异构系统的【自动创建流程类型】关闭 并且 流程类型不存在
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCnt(OfsSysInfo_autocreatewftype,workflownameCnt,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//异构系统的【自动创建流程类型】开启 并且 流程类型不存在,自动新增流程类型
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCntAndAuto(
OfsSysInfo_autocreatewftype, workflownameCnt,OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//根据异构系统id和流程类型名称获取异构系统流程类型信息
Map<String,String> OfsWorkflowMap = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname);
int OfsWorkflow_workflowid = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"workflowid",OfsWorkflow.Default_WorkflowId);//获取异构系统流程类型id
int OfsWorkflow_receivewfdata = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"receivewfdata",OfsWorkflow.ReceiveWfData_No);//接收流程数据
//流程类型不允许接收流程数据
resultMap = validateOfsWorkflowReceiveWfData(OfsWorkflow_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String OfsSysInfo_sysname = buildSysName(OfsSettingMap,OfsSysInfoMap);//系统显示名称
String isremarkName = buildIsRemarkName(isremark);
String OfsLog_OperType = "";
int requestid = ofsTodoDataService.buildRequestid(OfsSysInfo_sysid,OfsWorkflow_workflowid,flowid);
int OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);//主键
String returnMessage = "";
if(OfsTodoData_id == 0){//流程数据不存在
String flowguid = syscode + LINK_CHAR + OfsWorkflow_workflowid + LINK_CHAR + flowid + LINK_CHAR + receiver;
//保存流程数据;
boolean OfsTodoData_insert_flag = ofsTodoDataService.receiveRequestInfoInsert(
syscode,
OfsSysInfo_sysid+"",
requestid+"",
flowid,
flowguid,
requestname,
workflowname,
OfsWorkflow_workflowid+"",
nodename,
isremark,
viewtype,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,
receivets
);
if(!(OfsTodoData_insert_flag)){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003836,weaver.general.ThreadVarLanguage.getLang())+""+isremarkName+""+ SystemEnv.getHtmlLabelName(498,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003836,weaver.general.ThreadVarLanguage.getLang())+""+isremarkName+""+ SystemEnv.getHtmlLabelName(25008,weaver.general.ThreadVarLanguage.getLang())+"";
//获取主键
OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);
OfsLog_OperType = OfsLog.OperType_AutoNew;
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData+ LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,receivets
);
}else{
//数据存在,做更新操作
String flowguid = syscode + LINK_CHAR + OfsWorkflow_workflowid + LINK_CHAR + flowid + LINK_CHAR + receiver;
boolean isNeedUpdate = ofsTodoDataService.isNeedUpdate(OfsTodoData_id,receivets);
boolean OfsTodoData_update_flag = false;
if(isNeedUpdate){
//保存流程数据;
OfsTodoData_update_flag = ofsTodoDataService.receiveRequestInfoUpdate(
OfsTodoData_id+"",
syscode,
OfsSysInfo_sysid+"",
requestid+"",
flowid,
flowguid,
requestname,
workflowname,
OfsWorkflow_workflowid+"",
nodename,
isremark,
viewtype,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,
receivets
);
}else{
//数据库里的时间戳新,无需更新
OfsTodoData_update_flag = true;
}
if(!(OfsTodoData_update_flag)){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(82604,weaver.general.ThreadVarLanguage.getLang())+""+isremarkName+""+ SystemEnv.getHtmlLabelName(498,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(82604,weaver.general.ThreadVarLanguage.getLang())+""+isremarkName+""+ SystemEnv.getHtmlLabelName(25008,weaver.general.ThreadVarLanguage.getLang())+"";
OfsLog_OperType = OfsLog.OperType_AutoEdit;
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,
receivets
);
}
if((isremark.equals(OfsTodoData.IsRemark_Todo) || isremark.equals("8") || isremark.equals("9")) && viewtype.equals(OfsTodoData.ViewType_None)){//待办才发送消息提醒
Map<String, String> msgUrlMap = updatePcurlAndAppurl(pcurl, appurl, OfsSysInfoMap, OfsTodoData_id, flowid);
sendMessage(
OfsSettingMap,
OfsSysInfoMap,
OfsSysInfo_sysname,
workflowname,
requestname,
msgUrlMap.get("pcurl"),
msgUrlMap.get("appurl"),
creatorid,
createdate,
createtime,
receiverid,
receivedate,
receivetime,
OfsTodoData_id,
requestid
);
}
////将所有已办且iscomplete=0变更为iscomplete=1不处理待办情况
if(isremark.equals(OfsTodoData.IsRemark_Done)){//已办的处理
ofsTodoDataService.processOverRequestComplete(syscode,flowid);
}else if(isremark.equals(OfsTodoData.IsRemark_Over)){//办结的处理
ofsTodoDataService.processOverRequestComplete(syscode,flowid);
}
updatePcurlAndAppurl(pcurl, appurl, OfsSysInfoMap, OfsTodoData_id, flowid);
//TODO 设置消息已处理
if(isremark.equals("2") || isremark.equals("4")){
Set<String> userids = new HashSet<String>();
userids.add(receiverid);
try {
Util_Message.updateBizState(userids,syscode+"_"+flowid,"1");
} catch (Exception e) {
log.error("消息已处理异常——userids"+userids+"syscode+_+flowid"+syscode+"_"+flowid+", state:1",e);
}
}
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog_OperType,
OfsLog.OperResult_Success,
returnMessage
);
}
/**
*
* @param syscode
* @param flowid
* @return
*/
public Map<String, String> deleteRequestInfo(
String syscode,
String flowid
) {
if(syscode==null||"".equals(syscode)){
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_Del,
OfsLog.OperResult_Failure,
"流程数据删除失败,syscode为空"
);
}
if(flowid==null||"".equals(flowid)){
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_Del,
OfsLog.OperResult_Failure,
"流程数据删除失败,flowid为空"
);
}
int tododataCnt = ofsTodoDataService.getTodoDataCnt(syscode,flowid);
if(tododataCnt==0){
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_Del,
OfsLog.OperResult_Failure,
"流程数据删除失败,流程数据不存在"
);
}else{
//TODO 删除消息
RecordSet rs1 = new RecordSet();
rs1.executeQuery("select * from ofs_todo_data where syscode = ? and flowid = ?",syscode,flowid);
Set<String> userids = new HashSet<String>();
while(rs1.next()){
userids.add(rs1.getString("userid"));
}
log.error("userids:"+userids);
try {
MessageBean messageBean = Util_Message.createMessage();
messageBean.setUserList(userids);//接收人id
messageBean.setTargetId(syscode+"_"+flowid);
Util_Message.delMessageTargetid(messageBean);
} catch (Exception e) {
e.printStackTrace();
log.error("删除消息异常",e);
}
ofsTodoDataService.receiveRequestInfoDelete(syscode,flowid);
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_Del,
OfsLog.OperResult_Success,
"流程数据删除成功"
);
}
}
/**
*
* @param syscode
* @param flowid
* @param userid
* @return
*/
public Map<String, String> deleteUserRequestInfo(
String syscode,
String flowid,
String userid
) {
if(syscode==null||"".equals(syscode)){
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_Del,
OfsLog.OperResult_Failure,
"流程数据删除失败,syscode为空"
);
}
if(flowid==null||"".equals(flowid)){
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_Del,
OfsLog.OperResult_Failure,
"流程数据删除失败,flowid为空"
);
}
if(userid==null||"".equals(userid)){
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_Del,
OfsLog.OperResult_Failure,
"流程数据删除失败,userid为空"
);
}
int tododataCnt = ofsTodoDataService.getTodoDataCnt(syscode,flowid,userid);
if(tododataCnt==0){
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_Del,
OfsLog.OperResult_Failure,
"流程数据删除失败,流程数据不存在"
);
}else{
//TODO 删除消息
RecordSet rs1 = new RecordSet();
rs1.executeQuery("select * from ofs_todo_data where syscode = ? and flowid = ? and receiver = ?",syscode,flowid,userid);
Set<String> userids = new HashSet<String>();
rs1.next();
userids.add(rs1.getString("userid"));
log.error("userids:"+userids);
try {
MessageBean messageBean = Util_Message.createMessage();
messageBean.setUserList(userids);//接收人id
messageBean.setTargetId(syscode+"_"+flowid);
Util_Message.delMessageTargetid(messageBean);
} catch (Exception e) {
e.printStackTrace();
log.error("删除消息异常",e);
}
ofsTodoDataService.receiveRequestInfoUserDelete(syscode, flowid, userid);
String OfsLog_OperType = OfsLog.OperType_Del;
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog_OperType,
OfsLog.OperResult_Success,
"流程数据删除成功"
);
}
}
/**
* (map)
* @param dataMap
* @return
*/
public Map<String,String> processDoneRequestByMap(Map<String,String> dataMap){
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
String requestname = OfsUtils.getStringValueByMapKey(dataMap,"requestname");
String workflowname = OfsUtils.getStringValueByMapKey(dataMap,"workflowname");
String nodename = OfsUtils.getStringValueByMapKey(dataMap,"nodename");
String receiver = OfsUtils.getStringValueByMapKey(dataMap,"receiver");
String pcurl = OfsUtils.getStringValueByMapKey(dataMap,"pcurl");
String appurl = OfsUtils.getStringValueByMapKey(dataMap,"appurl");
String receivets = OfsUtils.getStringValueByMapKey(dataMap,"receivets"); //时间戳字段,客户端使用线程调用接口的时候,根据此字段判断是否需要更新数据,防止后发的请求数据被之前的覆盖
//对于未传时间戳的数据,用系统当前时间做时间戳
if("".equals(receivets)){
receivets = String.valueOf(System.currentTimeMillis());
}
return processDoneRequest(
syscode,
flowid,
requestname,
workflowname,
nodename,
receiver,
pcurl,
appurl,
receivets
);
}
/**
* json
* @param json
* @return
*/
public String processDoneRequestByJson (String json){
Map<String,String> dataMap = OfsUtils.jsonToMap(json);
Map<String,String> resultMap = processDoneRequestByMap(dataMap);
return OfsUtils.mapToJson(resultMap);
}
/**
* xml
* @param xml
* @return
*/
public String processDoneRequestByXml (String xml){
xml = SecurityMethodUtil.clearEntity(xml);
Map<String,String> dataMap = OfsUtils.xmlToMap(xml);
Map<String,String> resultMap = processDoneRequestByMap(dataMap);
return OfsUtils.mapToXml(resultMap,RESULT_XML_ROOT);
}
/**
*
* @param syscode
* @param flowid
* @param requestname
* @param workflowname
* @param nodename
* @param receiver
* @param pcurl
* @param appurl
* @param receivets
* @return
*/
public Map<String,String> processDoneRequest(
String syscode,
String flowid,
String requestname,
String workflowname,
String nodename,
String receiver,
String pcurl,
String appurl,
String receivets
){
Map<String,String> resultMap = new HashMap<String, String>();
String isremark = OfsLog.IsRemark_Done;
String creator = "";
String creatorid = "0";
String createdate = "";
String createtime = "";
String receiverid = "0";
String receivedate = "";
String receivetime = "";
Map<String,String> OfsSettingMap = ofsSettingService.getOneMap();
String OfsSetting_isuse = OfsUtils.getStringValueByMapKey(OfsSettingMap,"isuse",OfsSetting.IsUse_No);//是否启用统一待办中心状态
//校验时间戳
resultMap = validateReceivets(
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime,receivets);
if(!resultMap.isEmpty()){
return resultMap;
}
//关闭统一待办中心状态
resultMap = validateOfsSettingIsuse(OfsSetting_isuse,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//校验flowid不能为空
resultMap = validateFlowid("",
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int syscodeCnt = this.ofsSysInfoService.getCnt(syscode);//获取指定异构系统标识的数量
//记录系统日志:异构系统-检测-失败-异构系统标识【XXXX】未注册
resultMap = validateSyscode(syscodeCnt,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//根据系统标识获取异构系统信息
Map<String,String> OfsSysInfoMap = ofsSysInfoService.getOneMap(syscode);
int OfsSysInfo_sysid = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"sysid",OfsSysInfo.Default_SysId);//异构系统id
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人为空
resultMap = validateReceiver(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String OfsSysInfo_HrmTransRule = OfsUtils.getStringValueByMapKey(OfsSysInfoMap, "hrmtransrule");//人员转换规则
creatorid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,creator);
receiverid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,receiver);
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人不存在
resultMap = validateReceiverid(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String OfsSysInfo_securityip = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"securityip");//异构许可ip
//检测当前IP是否在许可IP范围内
resultMap = validateOfsSysInfoSecurityIP(OfsSysInfo_securityip,this.clientIp,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//记录系统日志:流程类型-检测-失败-流程类型未填写
resultMap = validateWorkflowname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//保存失败,记录系统日志:流程数据-检测-失败-流程标题未填写
resultMap = validateRequestname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int OfsSysInfo_receivewfdata = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"receivewfdata",OfsSysInfo.ReceiveWfData_No);//异构系统允许接收流程数据
//异构系统不允许接收流程数据
resultMap = validateOfsSysInfoReceiveWfData(OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int OfsSysInfo_autocreatewftype = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"autocreatewftype",OfsSysInfo.AutoCreateWfType_No);//异构系统自动创建流程类型
int workflownameCnt = ofsWorkflowService.getCnt(OfsSysInfo_sysid,workflowname);//是否新流程类型1旧0新
//异构系统的【自动创建流程类型】关闭 并且 流程类型不存在
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCnt(OfsSysInfo_autocreatewftype,workflownameCnt,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//异构系统的【自动创建流程类型】开启 并且 流程类型不存在,自动新增流程类型
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCntAndAuto(
OfsSysInfo_autocreatewftype, workflownameCnt,OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//根据异构系统id和流程类型名称获取异构系统流程类型信息
Map<String,String> OfsWorkflowMap = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname);
int OfsWorkflow_workflowid = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"workflowid",OfsWorkflow.Default_WorkflowId);//获取异构系统流程类型id
int OfsWorkflow_receivewfdata = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"receivewfdata",OfsWorkflow.ReceiveWfData_No);//接收流程数据
//流程类型不允许接收流程数据
resultMap = validateOfsWorkflowReceiveWfData(OfsWorkflow_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String flowguid = syscode + LINK_CHAR + OfsWorkflow_workflowid + LINK_CHAR + flowid + LINK_CHAR + receiver;
int requestid = ofsTodoDataService.buildRequestid(OfsSysInfo_sysid,OfsWorkflow_workflowid,flowid);
int OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);//主键
String returnMessage = "";
if(OfsTodoData_id == 0){//异构系统流程数据不存在
String currentDateString = TimeUtil.getCurrentTimeString();
String dateStr = currentDateString.substring(0,10);
String timeStr = currentDateString.substring(11);
//新增流程数据;
boolean OfsTodoData_insert_flag = ofsTodoDataService.receiveDoneRequest(
syscode,
OfsSysInfo_sysid+"",
requestid+"",
flowid,
flowguid,
requestname,
workflowname,
OfsWorkflow_workflowid+"",
nodename,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
dateStr,
timeStr,
receivets
);
if(!OfsTodoData_insert_flag){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003837,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
dateStr,
timeStr
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003838,weaver.general.ThreadVarLanguage.getLang())+"";
OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);//主键
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
dateStr,
timeStr,receivets
);
}else{//异构系统流程数据存在
boolean isNeedUpdate = ofsTodoDataService.isNeedUpdate(OfsTodoData_id,receivets);
boolean OfsTodoData_update_flag = false;
//更新待办变为已办
if(isNeedUpdate){
OfsTodoData_update_flag = ofsTodoDataService.processDoneRequest(
syscode,
flowid,
receiver,
workflowname,
requestname,
nodename,
pcurl,
appurl,
receivets
);
}else{
OfsTodoData_update_flag = true;
}
if(!OfsTodoData_update_flag){//保存失败,记录系统日志:流程数据-自动更新-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003839,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003840,weaver.general.ThreadVarLanguage.getLang())+"";
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,receivets
);
}
//将所有已办且iscomplete=0变更为iscomplete=1不处理待办情况
ofsTodoDataService.processOverRequestComplete(syscode,flowid);
updatePcurlAndAppurl(pcurl, appurl, OfsSysInfoMap, OfsTodoData_id, flowid);
//TODO 设置消息已处理
Set<String> userids = new HashSet<String>();
userids.add(receiverid);
try {
Util_Message.updateBizState(userids,syscode+"_"+flowid,"1");
} catch (Exception e) {
log.error("消息已处理异常——userids"+userids+"syscode+_+flowid"+syscode+"_"+flowid+", state:1",e);
}
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Success,
returnMessage
);
}
/**
* (map)
* @param dataMap
* @return
*/
public Map<String,String> processOverRequestByMap(Map<String,String> dataMap){
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
String requestname = OfsUtils.getStringValueByMapKey(dataMap,"requestname");
String workflowname = OfsUtils.getStringValueByMapKey(dataMap,"workflowname");
String nodename = OfsUtils.getStringValueByMapKey(dataMap,"nodename");
String receiver = OfsUtils.getStringValueByMapKey(dataMap,"receiver");
String pcurl = OfsUtils.getStringValueByMapKey(dataMap,"pcurl");
String appurl = OfsUtils.getStringValueByMapKey(dataMap,"appurl");
String receivets = OfsUtils.getStringValueByMapKey(dataMap,"receivets"); //时间戳字段,客户端使用线程调用接口的时候,根据此字段判断是否需要更新数据,防止后发的请求数据被之前的覆盖
//对于未传时间戳的数据,用系统当前时间做时间戳
if("".equals(receivets)){
receivets = String.valueOf(System.currentTimeMillis());
}
return processOverRequest(
syscode,
flowid,
requestname,
workflowname,
nodename,
receiver,
pcurl,
appurl,
receivets
);
}
/**
* json
* @param json
* @return
*/
public String processOverRequestByJson(String json){
Map<String,String> dataMap = OfsUtils.jsonToMap(json);
Map<String,String> resultMap = processOverRequestByMap(dataMap);
return OfsUtils.mapToJson(resultMap);
}
/**
* (xml)
* @param xml
* @return
*/
public String processOverRequestByXml(String xml){
xml = SecurityMethodUtil.clearEntity(xml);
Map<String,String> dataMap = OfsUtils.xmlToMap(xml);
Map<String,String> resultMap = processOverRequestByMap(dataMap);
return OfsUtils.mapToXml(resultMap,RESULT_XML_ROOT);
}
/**
*
* @param syscode
* @param flowid
* @param requestname
* @param workflowname
* @param nodename
* @param receiver
* @param pcurl
* @param appurl
* @param receivets
* @return
*/
public Map<String,String> processOverRequest(
String syscode,
String flowid,
String requestname,
String workflowname,
String nodename,
String receiver,
String pcurl,
String appurl,
String receivets
){
Map<String,String> resultMap = new HashMap<String, String>();
String isremark = OfsLog.IsRemark_Over;
String creator = "";
String creatorid = "0";
String createdate = "";
String createtime = "";
String receiverid = "0";
String receivedate = "";
String receivetime = "";
Map<String,String> OfsSettingMap = ofsSettingService.getOneMap();
String OfsSetting_isuse = OfsUtils.getStringValueByMapKey(OfsSettingMap,"isuse",OfsSetting.IsUse_No);//是否启用统一待办中心状态
//校验时间戳
resultMap = validateReceivets(
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime,receivets);
if(!resultMap.isEmpty()){
return resultMap;
}
//关闭统一待办中心状态
resultMap = validateOfsSettingIsuse(OfsSetting_isuse,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//校验flowid不能为空
resultMap = validateFlowid("",
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int syscodeCnt = this.ofsSysInfoService.getCnt(syscode);//获取指定异构系统标识的数量
//记录系统日志:异构系统-检测-失败-异构系统标识【XXXX】未注册
resultMap = validateSyscode(syscodeCnt,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
Map<String,String> OfsSysInfoMap = ofsSysInfoService.getOneMap(syscode);
int OfsSysInfo_sysid = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"sysid",OfsSysInfo.Default_SysId);//异构系统id
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人为空
resultMap = validateReceiver(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String OfsSysInfo_HrmTransRule = OfsUtils.getStringValueByMapKey(OfsSysInfoMap, "hrmtransrule");//人员转换规则
creatorid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,creator);
receiverid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,receiver);
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人不存在
resultMap = validateReceiverid(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String OfsSysInfo_securityip = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"securityip");//异构许可ip
//检测当前IP是否在许可IP范围内
resultMap = validateOfsSysInfoSecurityIP(OfsSysInfo_securityip,this.clientIp,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//记录系统日志:流程类型-检测-失败-流程类型未填写
resultMap = validateWorkflowname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//保存失败,记录系统日志:流程数据-检测-失败-流程标题未填写
resultMap = validateRequestname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int OfsSysInfo_receivewfdata = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"receivewfdata",OfsSysInfo.ReceiveWfData_No);//异构系统允许接收流程数据
//异构系统不允许接收流程数据
resultMap = validateOfsSysInfoReceiveWfData(OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
int OfsSysInfo_autocreatewftype = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"autocreatewftype",OfsSysInfo.AutoCreateWfType_No);//异构系统自动创建流程类型
int workflownameCnt = ofsWorkflowService.getCnt(OfsSysInfo_sysid,workflowname);//是否新流程类型1旧0新
//异构系统的【自动创建流程类型】关闭 并且 流程类型不存在
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCnt(OfsSysInfo_autocreatewftype,workflownameCnt,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//异构系统的【自动创建流程类型】开启 并且 流程类型不存在,自动新增流程类型
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCntAndAuto(
OfsSysInfo_autocreatewftype, workflownameCnt,OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//根据异构系统id和流程类型名称获取异构系统流程类型信息
Map<String,String> OfsWorkflowMap = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname);
int OfsWorkflow_workflowid = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"workflowid",OfsWorkflow.Default_WorkflowId);//获取异构系统流程类型id
int OfsWorkflow_receivewfdata = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"receivewfdata",OfsWorkflow.ReceiveWfData_No);//接收流程数据
//流程类型不允许接收流程数据
resultMap = validateOfsWorkflowReceiveWfData(OfsWorkflow_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String flowguid = syscode + LINK_CHAR + OfsWorkflow_workflowid + LINK_CHAR + flowid + LINK_CHAR + receiver;
int requestid = ofsTodoDataService.buildRequestid(OfsSysInfo_sysid,OfsWorkflow_workflowid,flowid);
int OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);//获取主键
String returnMessage = "";
if(OfsTodoData_id == 0){//异构系统流程数据不存在
//增加办结记录
String currentDateString = TimeUtil.getCurrentTimeString();
String dateStr = currentDateString.substring(0,10);
String timeStr = currentDateString.substring(11);
//新增流程数据;
boolean OfsTodoData_insert_flag = ofsTodoDataService.receiveOverRequest(
syscode,
OfsSysInfo_sysid+"",
requestid+"",
flowid,
flowguid,
requestname,
workflowname,
OfsWorkflow_workflowid+"",
nodename,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
dateStr,
timeStr,
receivets
);
if(!OfsTodoData_insert_flag){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003841,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
dateStr,
timeStr
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003842,weaver.general.ThreadVarLanguage.getLang())+"";
OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);//主键
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
dateStr,
timeStr,receivets
);
}else{
//更新已办变为办结
boolean OfsTodoData_update_flag = ofsTodoDataService.processOverRequest(
syscode,
flowid,
requestname,
workflowname,
nodename,
receiver,
pcurl,
appurl,
receivets
);
if(!(OfsTodoData_update_flag)){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003843,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003844,weaver.general.ThreadVarLanguage.getLang())+"";
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,receivets
);
}
//将所有已办且iscomplete=0变更为iscomplete=1不处理待办情况
ofsTodoDataService.processOverRequestComplete(syscode,flowid);
updatePcurlAndAppurl(pcurl, appurl, OfsSysInfoMap, OfsTodoData_id, flowid);
//TODO 设置消息已处理
Set<String> userids = new HashSet<String>();
userids.add(receiverid);
try {
Util_Message.updateBizState(userids,syscode+"_"+flowid,"1");
} catch (Exception e) {
log.error("消息已处理异常——userids"+userids+"syscode+_+flowid"+syscode+"_"+flowid+", state:1",e);
}
return buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Success,
returnMessage
);
}
/**
* ip
* securityip访
* securityipclientIpsecurityip
* @param securityip ip
* @param clientIp 访ip
* @return
*/
private boolean checkIp(final String securityip,final String clientIp){
return !securityip.equals("")?(","+securityip+",").indexOf(","+clientIp+",") > -1 : true;
}
/**
* RTX
* @param requestname
* @param sysname
* @param receiverid
* @param remindPcUrl
*/
private void sendMessageByRTX(
String requestname,
String sysname,
String receiverid,
String remindPcUrl
) {
new Thread(new OfsRemindRTXManager(Integer.parseInt(receiverid),sysname.equals("")?requestname:"("+sysname+"):"+requestname,remindPcUrl)).start();
}
/**
* Elink
* @param requestname
* @param workflowname
* @param receivedate
* @param receivetime
* @param id
* @param sysname
* @param receiverid
* @param remindPcUrl
*/
private void sendMessageByElink(
String requestname,
String workflowname,
String receivedate,
String receivetime,
int id,
String sysname,
String receiverid,
String remindPcUrl) {
StringBuffer messageJson = new StringBuffer();
messageJson.append("{");
messageJson.append("\"id\":\""+id+"\",");
messageJson.append("\"sysname\":\""+sysname+"\",");
messageJson.append("\"requestname\":\""+requestname+"\",");
messageJson.append("\"workflowname\":\""+workflowname+"\",");
messageJson.append("\"receivedate\":\""+receivedate+"\",");
messageJson.append("\"receivetime\":\""+receivetime+"\"");
messageJson.append("}");
new Thread(new OfsRemindElinkManager(Integer.parseInt(receiverid),messageJson.toString(),remindPcUrl)).start();
}
/**
* IM
* @param requestname
* @param workflowname
* @param sysname
* @param creatorid
* @param receiverid
* @param remindPcUrl
*/
private void sendMessageByOther(
String requestname,
String workflowname,
String sysname,
String creatorid,
String receiverid,
String remindPcUrl
) {
StringBuffer messageJson = new StringBuffer();
messageJson.append("{");
messageJson.append("\"sender\":\""+creatorid+"\",");
if(sysname.equals("")){
messageJson.append("\"title\":\""+workflowname+"\",");
}else{
messageJson.append("\"title\":\""+sysname+":"+workflowname+"\",");
}
messageJson.append("\"content\":\""+requestname+"\"");
messageJson.append("}");
new Thread(new OfsRemindOtherManager(Integer.parseInt(receiverid),messageJson.toString(),remindPcUrl)).start();
}
/**
* APP
* @param requestname
* @param workflowname
* @param sysname
* @param receiverid
* @param remindAppUrl
* @param messagetypeid
*/
private void sendMessageByApp(
String requestname,
String workflowname,
String sysname,
String receiverid,
String remindAppUrl,
String messagetypeid
) {
new Thread(new OfsRemindAppManager(Integer.parseInt(receiverid),requestname,remindAppUrl,messagetypeid)).start();
}
/**
* OA
* @param receiverid
* @param requestid
* @param remindPcUrl
*/
private void sendMessageByOA(
String receiverid,
int requestid,
String remindPcUrl
) {
new Thread(new OfsRemindOAManager(Integer.parseInt(receiverid),requestid+"",remindPcUrl)).start();
}
/**
* emessage
* @param sysname
* @param requestname
* @param receiverid
* @param remindPcUrl
* @param creatorid
* @param createdate
* @param createtime
*/
private void sendMessageByEmessage(
String sysname,
String requestname,
String receiverid,
String remindPcUrl,
String creatorid,
String createdate,
String createtime
) {
ResourceComInfo rci = null;
try {
rci = new ResourceComInfo();
} catch (Exception e) {
e.printStackTrace();
}
String lastname = Util.null2String(rci.getLastname(creatorid));
if (Util.isEnableMultiLang()){// 开启多语言
lastname = Util.formatMultiLang(lastname , User.getUserLang(Integer.parseInt(receiverid))+"") ;
}
String requestdetails = ""+ SystemEnv.getHtmlLabelName(505766,weaver.general.ThreadVarLanguage.getLang())+""+lastname+"<br>"+ SystemEnv.getHtmlLabelName(10003845,weaver.general.ThreadVarLanguage.getLang())+""+createdate+" "+createtime;
new Thread(new OfsRemindEmessageManager(Integer.parseInt(receiverid),sysname,requestname,requestdetails,remindPcUrl)).start();
}
/**
*
* @param receiverid
* @param requestid
* @param requestname
* @param remindAppUrl
* @param remindebridgetemplate
*/
private void sendMessageByEbridge(
String receiverid,
String requestid,
String requestname,
String remindAppUrl,
String remindebridgetemplate
) {
log.error("sendMessageByEbridge");
new Thread(new OfsRemindEbridgeManager(Integer.parseInt(receiverid),requestid,requestname,remindAppUrl,remindebridgetemplate)).start();
}
/**
*
*/
private String getEntranceUrl(String entranceurl, int OfsTodoData_id){
String url = "";
String param = "tododataid="+OfsTodoData_id;
if(!"".equals(entranceurl)){
if(entranceurl.contains("?")){
url = entranceurl+"&"+param;
}else{
url = entranceurl+"?"+param;
}
}
return url;
}
/**
* syscodeflowidjson_arr
* #599419
*
* @param json
*/
public void batchReceiveRequestInfoByJson(String json){
JSONArray json_arr = JSONArray.fromObject(json);
HashMap<String,JSONArray> map=new HashMap<String,JSONArray>();//key:syscode_flowid Value:相同flowid的JsonArray
if(json_arr!=null&&json_arr.size()>0) {
for (int i = 0; i < json_arr.size(); i++) {
map = OfsUtils.putMap(json_arr.getJSONObject(i), map);
}
log.info("共有"+map.size()+"条数据");
for (Map.Entry<String, JSONArray> entry:map.entrySet()) {
log.info("syscode_flowid: "+entry.getKey()+"共有"+entry.getValue().size()+"条数据");
dobatchReceiveRequestInfoByJson(entry.getValue());
}
}
}
/**
*
* @param json_arr
*/
public void dobatchReceiveRequestInfoByJson(JSONArray json_arr){
if(json_arr!=null){
if(json_arr.size()>0){
Map<String,String> data0Map = OfsUtils.jsonToMap(json_arr.getJSONObject(0).toString());
String syscode = OfsUtils.getStringValueByMapKey(data0Map,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(data0Map,"flowid");
String workflowname = OfsUtils.getStringValueByMapKey(data0Map,"workflowname");
Map<String,String> OfsSettingMap = ofsSettingService.getOneMap();
Map<String,String> OfsSysInfoMap = ofsSysInfoService.getOneMap(syscode);
int OfsSysInfo_sysid = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"sysid",OfsSysInfo.Default_SysId);//异构系统id
Map<String,String> OfsWorkflowMap = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname);
int OfsWorkflow_workflowid = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"workflowid",OfsWorkflow.Default_WorkflowId);//获取异构系统流程类型id
int requestid = ofsTodoDataService.buildRequestid(OfsSysInfo_sysid,OfsWorkflow_workflowid,flowid);
if(validateReceiveRequestInfoCommonData(OfsSettingMap,OfsSysInfoMap,OfsWorkflowMap,requestid,data0Map)){
OfsWorkflowMap = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname);
//生成批量执行sql
for(int i=0; i<json_arr.size(); i++){
Map<String,String> dataMap = OfsUtils.jsonToMap(json_arr.getJSONObject(i).toString());
getReceiveRequestInfoSql(OfsSettingMap,OfsSysInfoMap,OfsWorkflowMap,requestid,dataMap); //获取要存储数据库的数据
}
}
}
}
batchProcessOverRequstComplet(json_arr);//批量处理办结情况
}
private void batchProcessOverRequstComplet(JSONArray json_arr) {
Map<String,String> dataMap = OfsUtils.jsonToMap(json_arr.getJSONObject(0).toString());
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
String isremark = OfsUtils.getStringValueByMapKey(dataMap,"isremark");
//将所有已办且iscomplete=0变更为iscomplete=1不处理待办情况
if(isremark.equals(OfsTodoData.IsRemark_Done)){//已办的处理
ofsTodoDataService.processOverRequestComplete(syscode,flowid);
}else if(isremark.equals(OfsTodoData.IsRemark_Over)){//办结的处理
ofsTodoDataService.processOverRequestComplete(syscode,flowid);
}
}
/**
*
* @param json
*/
public void batchDeleteUserRequestInfoByJson(String json){
List<String> list_deleteParm = new ArrayList<String>();
JSONArray json_arr = JSONArray.fromObject(json);
if(json_arr!=null){
for(int i=0; i<json_arr.size(); i++){
Map<String,String> dataMap = OfsUtils.jsonToMap(json_arr.getJSONObject(i).toString());
String deldatasql = getDeleteUserRequestInfoSql(dataMap); //获取要删除数据库的数据
if(StringUtils.isNotBlank(deldatasql)){
list_deleteParm.add(deldatasql);
}
}
}
if(list_deleteParm!=null && list_deleteParm.size()>0){
StringBuilder sb = new StringBuilder();
sb.append(" delete from ").append(OfsTableName.Ofs_Todo_Data);
sb.append(" where syscode=? ");
sb.append(" and flowid=? ");
sb.append(" and receiver=? ");
String sql = sb.toString();
BatchRecordSet brd = new BatchRecordSet();
brd.executeSqlBatch(sql, list_deleteParm);
}
}
/**
*
* @param dataMap
* @return ("opt=1","data=XXXX","otherdata=XXXX"),1:2:,data3:iscomplete=1
*/
public Map<String,String> getReceiveRequestInfoSql(Map<String,String> OfsSettingMap,Map<String,String> OfsSysInfoMap,Map<String,String> OfsWorkflowMap,int requestid,Map<String,String> dataMap){
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
String requestname = OfsUtils.getStringValueByMapKey(dataMap,"requestname");
String workflowname = OfsUtils.getStringValueByMapKey(dataMap,"workflowname");
String nodename = OfsUtils.getStringValueByMapKey(dataMap,"nodename");
String pcurl = OfsUtils.getStringValueByMapKey(dataMap,"pcurl");
String appurl = OfsUtils.getStringValueByMapKey(dataMap,"appurl");
String isremark = OfsUtils.getStringValueByMapKey(dataMap,"isremark");
String viewtype = OfsUtils.getStringValueByMapKey(dataMap,"viewtype");
String createdatetime = OfsUtils.getStringValueByMapKey(dataMap,"createdatetime");
String creator = OfsUtils.getStringValueByMapKey(dataMap,"creator");
String receiver = OfsUtils.getStringValueByMapKey(dataMap,"receiver");
String receivedatetime = OfsUtils.getStringValueByMapKey(dataMap,"receivedatetime");
String receivets = OfsUtils.getStringValueByMapKey(dataMap,"receivets"); //时间戳字段,客户端使用线程调用接口的时候,根据此字段判断是否需要更新数据,防止后发的请求数据被之前的覆盖
//对于未传时间戳的数据,用系统当前时间做时间戳
if("".equals(receivets)){
receivets = String.valueOf(System.currentTimeMillis());
}
Map<String, String> resultMap = new HashMap<String, String>();
String creatorid = "0";
String createdate = "";
String createtime = "";
String receiverid = "0";
String receivedate = "";
String receivetime = "";
createdate = createdatetime.substring(0,10);
createtime = createdatetime.length()>11 ? createdatetime.substring(11):createtime;
receivedate = receivedatetime.substring(0,10);
receivetime = receivedatetime.length()>11 ? receivedatetime.substring(11):receivetime;
int OfsSysInfo_sysid = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"sysid",OfsSysInfo.Default_SysId);//异构系统id
//校验时间戳
resultMap = validateReceivets(
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime,receivets);
if(!resultMap.isEmpty()){
return resultMap;
}
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人为空
resultMap = validateReceiver(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
String OfsSysInfo_HrmTransRule = OfsUtils.getStringValueByMapKey(OfsSysInfoMap, "hrmtransrule");//人员转换规则
creatorid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,creator);
receiverid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,receiver);
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人不存在
resultMap = validateReceiverid(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
//根据异构系统id和流程类型名称获取异构系统流程类型信息
int OfsWorkflow_workflowid = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"workflowid",OfsWorkflow.Default_WorkflowId);//获取异构系统流程类型id
String OfsSysInfo_sysname = buildSysName(OfsSettingMap,OfsSysInfoMap);//系统显示名称
String isremarkName = buildIsRemarkName(isremark);
int OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);//主键
String flowguid = syscode + LINK_CHAR + OfsWorkflow_workflowid + LINK_CHAR + flowid + LINK_CHAR + receiver;
String returnMessage ="";
if(OfsTodoData_id == 0){//流程数据不存在
//保存流程数据;
boolean OfsTodoData_insert_flag = ofsTodoDataService.receiveRequestInfoInsert(
syscode,
OfsSysInfo_sysid+"",
requestid+"",
flowid,
flowguid,
requestname,
workflowname,
OfsWorkflow_workflowid+"",
nodename,
isremark,
viewtype,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,
receivets
);
if(!(OfsTodoData_insert_flag)){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003836,weaver.general.ThreadVarLanguage.getLang())+""+isremarkName+""+ SystemEnv.getHtmlLabelName(498,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003836,weaver.general.ThreadVarLanguage.getLang())+""+isremarkName+""+ SystemEnv.getHtmlLabelName(25008,weaver.general.ThreadVarLanguage.getLang())+"";
//获取主键
OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData+ LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,receivets
);
}else{
//数据存在,做更新操作
boolean isNeedUpdate = ofsTodoDataService.isNeedUpdate(OfsTodoData_id,receivets);
boolean OfsTodoData_update_flag = false;
if(isNeedUpdate){
//保存流程数据;
OfsTodoData_update_flag = ofsTodoDataService.receiveRequestInfoUpdate(
OfsTodoData_id+"",
syscode,
OfsSysInfo_sysid+"",
requestid+"",
flowid,
flowguid,
requestname,
workflowname,
OfsWorkflow_workflowid+"",
nodename,
isremark,
viewtype,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,
receivets
);
}else{
//数据库里的时间戳新,无需更新
OfsTodoData_update_flag = true;
}
if(!(OfsTodoData_update_flag)){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(82604,weaver.general.ThreadVarLanguage.getLang())+""+isremarkName+""+ SystemEnv.getHtmlLabelName(498,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(82604,weaver.general.ThreadVarLanguage.getLang())+""+isremarkName+""+ SystemEnv.getHtmlLabelName(25008,weaver.general.ThreadVarLanguage.getLang())+"";
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,receivets
);
}
Map<String, String> msgUrlMap = updatePcurlAndAppurl(pcurl, appurl, OfsSysInfoMap, OfsTodoData_id, flowid);
if((isremark.equals(OfsTodoData.IsRemark_Todo) || isremark.equals("8") || isremark.equals("9")) && viewtype.equals(OfsTodoData.ViewType_None)){//待办且未查看才发送消息提醒
sendMessage(
OfsSettingMap,
OfsSysInfoMap,
OfsSysInfo_sysname,
workflowname,
requestname,
msgUrlMap.get("pcurl"),
msgUrlMap.get("appurl"),
creatorid,
createdate,
createtime,
receiverid,
receivedate,
receivetime,
OfsTodoData_id,
requestid
);
}
//TODO 设置消息已处理
if(isremark.equals("2") || isremark.equals("4")){
Set<String> userids = new HashSet<String>();
userids.add(receiverid);
try {
Util_Message.updateBizState(userids,syscode+"_"+flowid,"1");
} catch (Exception e) {
log.error("消息已处理异常——userids"+userids+"syscode+_+flowid"+syscode+"_"+flowid+", state:1",e);
}
}
return resultMap;
}
/**
*
* @param dataMap
* @return
*/
public String getDeleteUserRequestInfoSql(Map<String,String> dataMap){
String delsql = "";
char flag = Util.getSeparator();
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
String userid=OfsUtils.getStringValueByMapKey(dataMap,"userid");
if(syscode==null||"".equals(syscode)){
String OfsLog_OperType = OfsLog.OperType_Del;
String message = ""+ SystemEnv.getHtmlLabelName(10003846,weaver.general.ThreadVarLanguage.getLang())+",syscode"+ SystemEnv.getHtmlLabelName(385284,weaver.general.ThreadVarLanguage.getLang())+"";
buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog_OperType,
OfsLog.OperResult_Failure,
message
);
return "";
}
if(flowid==null||"".equals(flowid)){
String OfsLog_OperType = OfsLog.OperType_Del;
String message = ""+ SystemEnv.getHtmlLabelName(10003846,weaver.general.ThreadVarLanguage.getLang())+",flowid"+ SystemEnv.getHtmlLabelName(385284,weaver.general.ThreadVarLanguage.getLang())+"";
buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog_OperType,
OfsLog.OperResult_Failure,
message
);
return "";
}
if(userid==null||"".equals(userid)){
String OfsLog_OperType = OfsLog.OperType_Del;
String message = ""+ SystemEnv.getHtmlLabelName(10003846,weaver.general.ThreadVarLanguage.getLang())+",userid"+ SystemEnv.getHtmlLabelName(385284,weaver.general.ThreadVarLanguage.getLang())+"";
buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog_OperType,
OfsLog.OperResult_Failure,
message
);
return "";
}
int tododataCnt = ofsTodoDataService.getTodoDataCnt(syscode,flowid,userid);
if(tododataCnt==0){
String message = ""+ SystemEnv.getHtmlLabelName(10003846,weaver.general.ThreadVarLanguage.getLang())+","+ SystemEnv.getHtmlLabelName(10003847,weaver.general.ThreadVarLanguage.getLang())+"";
String OfsLog_OperType = OfsLog.OperType_Del;
buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog_OperType,
OfsLog.OperResult_Failure,
message
);
return "";
}else{
StringBuilder sb2 = new StringBuilder();
sb2.append(syscode).append(flag);
sb2.append(flowid).append(flag);
sb2.append(userid);
delsql = sb2.toString();
String message = ""+ SystemEnv.getHtmlLabelName(10003848,weaver.general.ThreadVarLanguage.getLang())+"";
String OfsLog_OperType = OfsLog.OperType_Del;
buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog_OperType,
OfsLog.OperResult_Success,
message
);
//TODO 删除消息
RecordSet rs1 = new RecordSet();
rs1.executeQuery("select * from ofs_todo_data where syscode = ? and flowid = ? and receiver = ?",syscode,flowid,userid);
Set<String> userids = new HashSet<String>();
rs1.next();
userids.add(rs1.getString("userid"));
try {
MessageBean messageBean = Util_Message.createMessage();
messageBean.setUserList(userids);//接收人id
messageBean.setTargetId(syscode+"_"+flowid);
Util_Message.delMessageTargetid(messageBean);
} catch (Exception e) {
e.printStackTrace();
log.error("删除消息异常",e);
}
return delsql;
}
}
private boolean checkDateTime(String datetime) {
return Pattern.compile("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}(:\\d{2})?$").matcher(datetime).matches();
}
private Map<String, String> validateFlowid(
String createdatetime,
String syscode, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(StringUtils.isBlank(flowid)){//流程id不能为空
resultMap = saveLog(
"0",
OfsLog.DataType_IsUse + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"flowid"+ SystemEnv.getHtmlLabelName(18622,weaver.general.ThreadVarLanguage.getLang())+"",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateReceivets(
String syscode, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime,String receivets
) {
Map<String, String> resultMap = new HashMap<String, String>();
try{
Long num = Long.parseLong(receivets);
}catch (Exception e){
resultMap = saveLog(
"0",
OfsLog.DataType_IsUse + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"时间戳不合法,当前时间戳为:"+receivets,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateCreateDateTime(
String createdatetime,
String syscode, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(!checkDateTime(createdatetime)){//校验创建日期格式
resultMap = saveLog(
"0",
OfsLog.DataType_IsUse + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"创建日期不合法合法格式yyyy-mm-dd hh:MM:ss",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateReceiveDateTime(
String receivedatetime,
String syscode, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(!checkDateTime(receivedatetime)){//校验接收日期格式
resultMap = saveLog(
"0",
OfsLog.DataType_IsUse + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"接收日期不合法合法格式yyyy-mm-dd hh:MM:ss",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateOfsSettingIsuse(
String OfsSetting_isuse,
String syscode, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(!OfsSetting.IsUse_Yes.equals(OfsSetting_isuse)){//关闭统一待办中心状态
resultMap = saveLog(
"0",
OfsLog.DataType_IsUse + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"统一待办中心未启用",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateSyscode(
int syscodeCnt,
String syscode, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(syscodeCnt == 0){//记录系统日志:异构系统-检测-失败-异构系统标识【XXXX】未注册
resultMap = saveLog(
"0",
OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"异构系统标识【"+syscode+"】未注册",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateReceiver(
String syscode,int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(Util.null2String(receiver).equals("")){//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人为空
resultMap = saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"流程数据【"+requestname+"】检测接收人为空",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateReceiverid(
String syscode,int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(Util.null2String(receiverid).equals("0")){//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人不存在
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"流程数据【"+requestname+"】检测接收人不存在",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateOfsSysInfoSecurityIP(
String securityip, String clientIp,
String syscode,int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(!checkIp(securityip,clientIp)){
//检测当前IP是否在许可IP范围内
resultMap = saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"异构系统标识【"+syscode+"】当前IP"+this.clientIp+")未授权",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateWorkflowname(
String syscode,int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(workflowname.equals("")){//记录系统日志:流程类型-检测-失败-流程类型未填写
resultMap = saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfType + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"流程类型未填写",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateRequestname(
String syscode,int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(requestname.equals("")){//保存失败,记录系统日志:流程数据-检测-失败-流程标题未填写
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"流程标题未填写",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateOfsSysInfoReceiveWfData(
int OfsSysInfo_receivewfdata,
String syscode,int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(OfsSysInfo_receivewfdata == 0){//异构系统不允许接收流程数据
resultMap = saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"异构系统标识【"+syscode+"】不允许接收流程数据",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCnt(
int OfsSysInfo_autocreatewftype, int workflownameCnt,
String syscode,int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(OfsSysInfo_autocreatewftype == 0 && workflownameCnt == 0){//异构系统的【自动创建流程类型】关闭 并且 流程类型不存在
resultMap = saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"异构系统标识【"+syscode+"】不允许创建流程类型",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateOfsWorkflowReceiveWfData(
int OfsWorkflow_receivewfdata,
String syscode,int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(OfsWorkflow_receivewfdata == 0){//流程类型不允许接收流程数据
resultMap = saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfType + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"流程类型【"+workflowname+"】不允许接收流程数据",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateIsRemark(
String syscode,int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(!isremark.equals(OfsTodoData.IsRemark_Todo) &&
!isremark.equals(OfsTodoData.IsRemark_Done) &&
!isremark.equals(OfsTodoData.IsRemark_Over)&&
!isremark.equals("8")&&
!isremark.equals("9")){//检测isremark不合法
resultMap = saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"流程数据【"+requestname+"】检测isremark不合法",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateViewType(String viewtype,
String syscode,int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,String isremark,
String pcurl, String appurl,
String creator, String creatorid, String createdate,String createtime,
String receiver, String receiverid, String receivedate,String receivetime
) {
Map<String, String> resultMap = new HashMap<String, String>();
if(!viewtype.equals(OfsTodoData.ViewType_None) &&
!viewtype.equals(OfsTodoData.ViewType_Over) ){//检查viewtype值是否合法
resultMap = saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_Check,
OfsLog.OperResult_Failure,
"流程数据【"+requestname+"】检测viewtype不合法",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
return resultMap;
}
private Map<String, String> validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCntAndAuto(
int OfsSysInfo_autocreatewftype, int workflownameCnt,int OfsSysInfo_receivewfdata,
String syscode, int OfsSysInfo_sysid, String flowid,
String requestname, String workflowname, String nodename,
String isremark, String pcurl, String appurl, String creator,
String creatorid, String createdate, String createtime,
String receiver, String receiverid, String receivedate,
String receivetime) {
Map<String, String> resultMap = new HashMap<String, String>();
if(OfsSysInfo_autocreatewftype == 1 && workflownameCnt == 0){//异构系统的【自动创建流程类型】开启 并且 流程类型不存在
//流程类型不存在
//相同flowid历史数据中的流程类型是否存在
List<HashMap<String, String>> historyOfsWfTypeExistList = ofsTodoDataService.getHistoryOfsWfTypeExistList(OfsSysInfo_sysid+"",workflowname,flowid);
//历史数据中的流程类型不存在
if(historyOfsWfTypeExistList.size()==0){//不存在,自动新增
//创建流程类型;
boolean ofswftypeInsertFlag = ofsWorkflowService.insert(
OfsSysInfo_sysid+"",workflowname,OfsSysInfo_receivewfdata+"",OfsWorkflow.Cancel_No+"",SYSADMIN_ID);
if(ofswftypeInsertFlag){//记录系统日志:流程类型-自动创建-成功
//自动创建流程成功后要重新获取流程类型数据
Map<String,String> OfsWorkflowMap = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname);
int OfsWorkflow_workflowid = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"workflowid",OfsWorkflow.Default_WorkflowId);//获取异构系统流程类型id
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfType + LINK_CHAR + OfsWorkflow_workflowid,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Success,
"流程类型【"+workflowname+"】自动创建成功",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,""
);
}else{//记录系统日志:流程类型-自动创建-失败-流程类型【XXXX】保存失败
resultMap = saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfType + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Failure,
"流程类型【"+workflowname+"】自动创建失败",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
}else{//存在,自动更新
//更新流程类型;
boolean ofswftypeUpdateFlag = ofsWorkflowService.updateWorkflowName(OfsSysInfo_sysid+"",workflowname,SYSADMIN_ID,historyOfsWfTypeExistList);
if(ofswftypeUpdateFlag){//记录系统日志:流程类型-自动创建-成功
//自动创建流程成功后要重新获取流程类型数据
Map<String,String> OfsWorkflowMap = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname);
int OfsWorkflow_workflowid = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"workflowid",OfsWorkflow.Default_WorkflowId);//获取异构系统流程类型id
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfType + LINK_CHAR + OfsWorkflow_workflowid,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Success,
"流程类型【"+workflowname+"】自动更新成功",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,""
);
}else{//记录系统日志:流程类型-自动创建-失败-流程类型【XXXX】保存失败
resultMap = saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfType + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Failure,
"流程类型【"+workflowname+"】自动更新失败",
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
}
}
return resultMap;
}
private String buildPcUrl(Map<String, String> OfsSysInfoMap,int OfsTodoDataId,String pcurl){
String OfsSysInfo_pcentranceurl = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"pcentranceurl");//PC单点登录页面
if(!"".equals(OfsSysInfo_pcentranceurl)){
return getEntranceUrl(OfsSysInfo_pcentranceurl,OfsTodoDataId);
}
return pcurl;
}
private String buildAppUrl(Map<String, String> OfsSysInfoMap,int OfsTodoDataId,String appurl){
String OfsSysInfo_pcentranceurl = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"appentranceurl");//PC单点登录页面
if(!"".equals(OfsSysInfo_pcentranceurl)){
return getEntranceUrl(OfsSysInfo_pcentranceurl,OfsTodoDataId);
}
return appurl;
}
private Map<String,String> updatePcurlAndAppurl(String pcurl, String appurl,Map<String, String> OfsSysInfoMap, int OfsTodoData_id,String flowid) {
//单点登录地址
String pcurlsrc = pcurl;
pcurl = buildPcUrl(OfsSysInfoMap, OfsTodoData_id, pcurl);
String appurlsrc = appurl;
appurl = buildAppUrl(OfsSysInfoMap, OfsTodoData_id, appurl);
//更新地址
ofsTodoDataService.updateUrl(OfsTodoData_id,flowid,pcurlsrc,pcurl,appurlsrc,appurl);
Map<String,String> map = new HashMap<String,String>();
map.put("pcurl",pcurl);
map.put("appurl",appurl);
return map;
}
private String buildSysName(Map<String, String> OfsSettingMap,Map<String, String> OfsSysInfoMap){
String OfsSetting_showsysname = OfsUtils.getStringValueByMapKey(OfsSettingMap,"showsysname");//显示异构系统名称
String OfsSysInfo_sysshortname = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"sysshortname");//异构系统简称
String OfsSysInfo_sysfullname = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"sysfullname");//异构系统全称
String OfsSysInfo_sysname = "";
if(OfsSetting_showsysname.equalsIgnoreCase(OfsSetting.ShowSysName_None)){
OfsSysInfo_sysname = "";
}else if(OfsSetting_showsysname.equalsIgnoreCase(OfsSetting.ShowSysName_Short)){
OfsSysInfo_sysname = OfsSysInfo_sysshortname;
}else if(OfsSetting_showsysname.equalsIgnoreCase(OfsSetting.ShowSysName_Full)){
OfsSysInfo_sysname = OfsSysInfo_sysfullname;
}
return OfsSysInfo_sysname;
}
private void sendMessage(
Map<String, String> OfsSettingMap,
Map<String, String> OfsSysInfoMap,
String sysname,
String workflowname,
String requestname,
String pcurl,
String appurl,
String creatorid,
String createdate,
String createtime,
String receiverid,
String receivedate,
String receivetime,
int OfsTodoDataId,
int requestid
) {
String OfsSysInfo_pcprefixurl = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"pcprefixurl");//PC地址前缀
String OfsSysInfo_appprefixurl = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"appprefixurl");//APP地址前缀
//待办才发送消息提醒
String remindPcUrl = (OfsSysInfo_pcprefixurl+""+pcurl);
String remindAppUrl = (OfsSysInfo_appprefixurl+""+appurl);
//TODO 如果有中转页面,推送给消息中心的是中转页面地址
RecordSet rsrtx = new RecordSet();
String sqlStr = "select * from SystemSet";
rsrtx.executeSql(sqlStr);
rsrtx.next();
String oaaddress = rsrtx.getString("oaaddress");
String appentranceurl = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"appentranceurl");//APP地址前缀
if(StringUtils.isNotBlank(appentranceurl)){
remindAppUrl = oaaddress+appurl;
}
String pcentranceurl = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"pcentranceurl");//APP地址前缀
if(StringUtils.isNotBlank(pcentranceurl)){
remindPcUrl = oaaddress+pcurl;
}
if(pcurl.startsWith("http") || pcurl.startsWith("https")){
remindPcUrl = pcurl;
}
if(appurl.startsWith("http") || appurl.startsWith("https")){
remindAppUrl = appurl;
}
log.error("消息通知 app访问地址"+remindAppUrl);
log.error("消息通知 pc访问地址"+remindPcUrl);
RTXConfig config = new RTXConfig();
String RtxOrElinkType = config.getPorp(RTXConfig.RtxOrElinkType);//IM提醒类型
String isusedtx = config.getPorp("isusedtx");//开启IM集成
log.error("=======================sendMessage start....====================");
//todo 用消息中心了
ConfigManager configManager = new ConfigManager();
Map<WeaMessageTypeConfig,List<String>> accessConfig=configManager.defaultRuleCheckConfig(MessageType.OTHER_MAILWAIT_REMIND, Util.getIntValue(receiverid),null);
boolean b = false;
if (accessConfig != null && accessConfig.size() > 0) {
b = true;
for (Map.Entry<WeaMessageTypeConfig,List<String>> entry:accessConfig.entrySet()){
//TodoCenterTodoMessageSender todoCenterTodoMessageSender = new TodoCenterTodoMessageSender(OfsSettingMap, OfsSysInfoMap, sysname, workflowname, requestname, remindPcUrl, remindAppUrl, creatorid, createdate, createtime, receiverid, receivedate, receivetime, OfsTodoDataId, requestid);
//new Thread(todoCenterTodoMessageSender).start();
// 4、构造消息实体
MessageBean message = null;
try {
User user = User.getUser(Util.getIntValue(creatorid),0);
int langId = 7;
String userName = "";
if (user != null) {
langId = user.getLanguage();
userName = user.getLastname();
}
String detailContent = SystemEnv.getHtmlLabelName(882, langId) + ":" + userName;
detailContent += "<br />";
detailContent += SystemEnv.getHtmlLabelName(1339, langId) + ":" + createdate + " " + createtime;
message = Util_Message.createMessage(MessageType.OTHER_MAILWAIT_REMIND, Util.getIntValue( receiverid,0), requestname,""+"${}"+sysname+"", detailContent, remindPcUrl, remindAppUrl, Util.getIntValue( creatorid,0));
message.setBizState("0");
//TODO 获取syscode和flowid作为TargetId
RecordSet rs = new RecordSet();
rs.executeQuery("select * from ofs_todo_data where id = ?" ,OfsTodoDataId);
rs.next();
String syscode = rs.getString("syscode");
String flowid = rs.getString("flowid");
message.setTargetId(syscode+"_"+flowid);
Map<String, Object> detailTitleParams = message.getDetailTitleParams();
detailTitleParams.put("workflow_name", workflowname);
detailTitleParams.put("system_name", sysname);
} catch (IOException e) {
e.printStackTrace();
}
// 5、获取新的自定义消息类型
WeaMessageTypeConfig config1 = entry.getKey();
// 6、新的自定义消息类型相关信息通知到消息实体bean上
message.setMessageConfig(config1);
// 7、设置检查配置通过需要发送消息的用户
message.setUserList(Sets.newHashSet(entry.getValue()));
String s = JSONObject.toJSONString(message);
new BaseBean().writeLog("推送消息==="+s);
new BaseBean().writeLog("推送消息类==="+this.getClass().getName());
// 8、发送消息
try {
Util_Message.sendAndpublishMessage(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
String OfsParam_remindim = OfsUtils.getStringValueByMapKey(OfsSettingMap,"remindim",OfsSetting.RemindIM_No);//提醒到IM
if(b&&isusedtx.equals("1") && OfsSetting.RemindIM_Yes.equals(OfsParam_remindim)){//开启提醒到IM
if(RtxOrElinkType.equals("RTX")){//RTX
sendMessageByRTX(
requestname,
sysname,
receiverid,
remindPcUrl);
}else if(RtxOrElinkType.equals("ELINK")){//ELINK
sendMessageByElink(requestname,
workflowname,
receivedate,
receivetime,
OfsTodoDataId,
sysname,
receiverid,
remindPcUrl);
}else {//Other
sendMessageByOther(
requestname,
workflowname,
sysname,
creatorid,
receiverid,
remindPcUrl);
}
}
String OfsParam_remindapp = OfsUtils.getStringValueByMapKey(OfsSettingMap,"remindapp",OfsSetting.RemindApp_No);//提醒到手机版
if(b&&OfsSetting.RemindApp_Yes.equals(OfsParam_remindapp)){//开启提醒到手机版
String OfsSetting_messagetypeid = OfsUtils.getStringValueByMapKey(OfsSettingMap,"messagetypeid",OfsSetting.Default_MessageTypeId);//手机提醒通道号
sendMessageByApp(
requestname,
workflowname,
sysname,
receiverid,
remindAppUrl,
OfsSetting_messagetypeid);
}
/*String OfsParam_remindoa = OfsUtils.getStringValueByMapKey(OfsSettingMap,"remindoa",OfsSetting.RemindOA_No);//提醒到OA
if(OfsSetting.RemindOA_Yes.equals(OfsParam_remindoa)){//开启提醒到OA
sendMessageByOA(
receiverid,
requestid,
remindPcUrl);
}*/
String OfsParam_remindemessage = OfsUtils.getStringValueByMapKey(OfsSettingMap,"remindemessage",OfsSetting.RemindEmessage_No);//提醒到emessage
if(b&&OfsSetting.RemindEmessage_Yes.equals(OfsParam_remindemessage)){//开启提醒到emessage
sendMessageByEmessage(
sysname,
requestname,
receiverid,
remindPcUrl,
creatorid,
createdate,
createtime);
}
String OfsParam_remindebridge = OfsUtils.getStringValueByMapKey(OfsSettingMap,"remindebridge",OfsSetting.RemindEbridge_No);//提醒到微信
if(b&&OfsSetting.RemindEbridge_Yes.equals(OfsParam_remindebridge)){//开启提醒到微信
String OfsSetting_remindebridgetemplate = OfsUtils.getStringValueByMapKey(OfsSettingMap,"remindebridgetemplate",OfsSetting.Default_RemindEbridgeTemplate);//云桥提醒模板
sendMessageByEbridge(
receiverid,
requestid+"",
requestname,
remindAppUrl,
OfsSetting_remindebridgetemplate);
}
}
private String buildIsRemarkName(String isremark) {
String isRemarkName = "";
if(isremark.equals(OfsTodoData.IsRemark_Todo)){
isRemarkName = ""+ SystemEnv.getHtmlLabelName(16658,weaver.general.ThreadVarLanguage.getLang())+"";
}else if(isremark.equals(OfsTodoData.IsRemark_Done)){
isRemarkName = ""+ SystemEnv.getHtmlLabelName(24627,weaver.general.ThreadVarLanguage.getLang())+"";
}else if(isremark.equals(OfsTodoData.IsRemark_Over)){
isRemarkName = ""+ SystemEnv.getHtmlLabelName(22487,weaver.general.ThreadVarLanguage.getLang())+"";
}else if(isremark.equals("8")){
isRemarkName = ""+ SystemEnv.getHtmlLabelName(10003849,weaver.general.ThreadVarLanguage.getLang())+"";
}else if(isremark.equals("9")){
isRemarkName = ""+ SystemEnv.getHtmlLabelName(10003849,weaver.general.ThreadVarLanguage.getLang())+"";
}
return isRemarkName;
}
private boolean validateReceiveRequestInfoCommonData(Map<String,String> OfsSettingMap,Map<String,String> OfsSysInfoMap,Map<String,String> OfsWorkflowMap,int requestid,Map<String,String> dataMap){
Map<String, String> resultMap = new HashMap<String, String>();
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
String requestname = OfsUtils.getStringValueByMapKey(dataMap,"requestname");
String workflowname = OfsUtils.getStringValueByMapKey(dataMap,"workflowname");
String nodename = OfsUtils.getStringValueByMapKey(dataMap,"nodename");
String pcurl = OfsUtils.getStringValueByMapKey(dataMap,"pcurl");
String appurl = OfsUtils.getStringValueByMapKey(dataMap,"appurl");
String isremark = OfsUtils.getStringValueByMapKey(dataMap,"isremark");
String viewtype = OfsUtils.getStringValueByMapKey(dataMap,"viewtype");
String createdatetime = OfsUtils.getStringValueByMapKey(dataMap,"createdatetime");
String creator = OfsUtils.getStringValueByMapKey(dataMap,"creator");
String receiver = OfsUtils.getStringValueByMapKey(dataMap,"receiver");
String receivedatetime = OfsUtils.getStringValueByMapKey(dataMap,"receivedatetime");
String receivets = OfsUtils.getStringValueByMapKey(dataMap,"receivets"); //时间戳字段,客户端使用线程调用接口的时候,根据此字段判断是否需要更新数据,防止后发的请求数据被之前的覆盖
//对于未传时间戳的数据,用系统当前时间做时间戳
if("".equals(receivets)){
receivets = String.valueOf(System.currentTimeMillis());
}
String creatorid = "0";
String createdate = "";
String createtime = "";
String receiverid = "0";
String receivedate = "";
String receivetime = "";
//校验创建日期时间
resultMap = validateCreateDateTime(createdatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
//校验flowid不能为空
resultMap = validateFlowid(createdatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
createdate = createdatetime.substring(0,10);
createtime = createdatetime.length()>11 ? createdatetime.substring(11):createtime;
//校验接收日期时间
resultMap = validateReceiveDateTime(receivedatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
receivedate = receivedatetime.substring(0,10);
receivetime = receivedatetime.length()>11 ? receivedatetime.substring(11):receivetime;
String OfsSetting_isuse = OfsUtils.getStringValueByMapKey(OfsSettingMap,"isuse",OfsSetting.IsUse_No);//是否启用统一待办中心状态
//关闭统一待办中心状态
resultMap = validateOfsSettingIsuse(OfsSetting_isuse,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
int syscodeCnt = this.ofsSysInfoService.getCnt(syscode);//获取指定异构系统标识的数量
//记录系统日志:异构系统-检测-失败-异构系统标识【XXXX】未注册
resultMap = validateSyscode(syscodeCnt,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
int OfsSysInfo_sysid = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"sysid",OfsSysInfo.Default_SysId);//异构系统id
//检测isremark不合法
resultMap = validateIsRemark(
syscode, OfsSysInfo_sysid,flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
//检查viewtype值是否合法
resultMap = validateViewType(viewtype,
syscode, OfsSysInfo_sysid,flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人为空
/*resultMap = validateReceiver(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}*/
String OfsSysInfo_HrmTransRule = OfsUtils.getStringValueByMapKey(OfsSysInfoMap, "hrmtransrule");//人员转换规则
creatorid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,creator);
receiverid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,receiver);
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人不存在
/* resultMap = validateReceiverid(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}*/
String OfsSysInfo_securityip = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"securityip");//异构许可ip
//检测当前IP是否在许可IP范围内
resultMap = validateOfsSysInfoSecurityIP(OfsSysInfo_securityip,this.clientIp,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
//记录系统日志:流程类型-检测-失败-流程类型未填写
resultMap = validateWorkflowname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
//保存失败,记录系统日志:流程数据-检测-失败-流程标题未填写
resultMap = validateRequestname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
int OfsSysInfo_receivewfdata = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"receivewfdata",OfsSysInfo.ReceiveWfData_No);//异构系统允许接收流程数据
//异构系统不允许接收流程数据
resultMap = validateOfsSysInfoReceiveWfData(OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
int OfsSysInfo_autocreatewftype = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"autocreatewftype",OfsSysInfo.AutoCreateWfType_No);//异构系统自动创建流程类型
int workflownameCnt = ofsWorkflowService.getCnt(OfsSysInfo_sysid,workflowname);//是否新流程类型1旧0新
//异构系统的【自动创建流程类型】关闭 并且 流程类型不存在
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCnt(OfsSysInfo_autocreatewftype,workflownameCnt,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
//异构系统的【自动创建流程类型】开启 并且 流程类型不存在,自动新增流程类型
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCntAndAuto(
OfsSysInfo_autocreatewftype, workflownameCnt,OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
//根据异构系统id和流程类型名称获取异构系统流程类型信息
OfsWorkflowMap = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname);
int OfsWorkflow_receivewfdata = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"receivewfdata",OfsWorkflow.ReceiveWfData_No);//接收流程数据
//流程类型不允许接收流程数据
resultMap = validateOfsWorkflowReceiveWfData(OfsWorkflow_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return false;
}
return true;
}
//TODO 抄送
/**
* (json)
* @param json
* @return
*/
public String receiveCCRequestByJson(String json) {
Map<String,String> dataMap = OfsUtils.jsonToMap(json);
Map<String,String> resultMap = receiveCCRequestByMap(dataMap);
String resultJson = OfsUtils.mapToJson(resultMap);
return resultJson;
}
/**
* (xml)
* @param xml
* @return
*/
public String receiveCCRequestByXml(String xml) {
xml = SecurityMethodUtil.clearEntity(xml);
Map<String,String> dataMap = OfsUtils.xmlToMap(xml);
Map<String,String> resultMap = receiveCCRequestByMap(dataMap);
String toXml = OfsUtils.mapToXml(resultMap, RESULT_XML_ROOT);
return toXml;
}
/**
*
* @param dataMap
* @return
*/
public Map<String,String> receiveCCRequestByMap(Map<String, String> dataMap) {
String syscode = OfsUtils.getStringValueByMapKey(dataMap,"syscode");
String viewType = OfsUtils.getStringValueByMapKey(dataMap,"viewType");
String flowid = OfsUtils.getStringValueByMapKey(dataMap,"flowid");
String requestname = OfsUtils.getStringValueByMapKey(dataMap,"requestname");
String workflowname = OfsUtils.getStringValueByMapKey(dataMap,"workflowname");
String nodename = OfsUtils.getStringValueByMapKey(dataMap,"nodename");
String pcurl = OfsUtils.getStringValueByMapKey(dataMap,"pcurl");
String appurl = OfsUtils.getStringValueByMapKey(dataMap,"appurl");
String createdatetime = OfsUtils.getStringValueByMapKey(dataMap,"createdatetime");
String creator = OfsUtils.getStringValueByMapKey(dataMap,"creator");
String receiver = OfsUtils.getStringValueByMapKey(dataMap,"receiver");
String receivedatetime = OfsUtils.getStringValueByMapKey(dataMap,"receivedatetime");
String receivets = OfsUtils.getStringValueByMapKey(dataMap,"receivets"); //时间戳字段,客户端使用线程调用接口的时候,根据此字段判断是否需要更新数据,防止后发的请求数据被之前的覆盖
//对于未传时间戳的数据,用系统当前时间做时间戳
if("".equals(receivets)){
receivets = String.valueOf(System.currentTimeMillis());
}
Map<String, String> map = receiveCCRequest(
syscode,
flowid,
requestname,
workflowname,
nodename,
pcurl,
appurl,
creator,
createdatetime,
receiver,
receivedatetime,
receivets,viewType);
return map;
}
/**
*
* @param syscode
* @param flowid
* @param requestname
* @param workflowname
* @param nodename
* @param pcurl
* @param appurl
* @param creator
* @param createdatetime
* @param receiver
* @param receivedatetime
* @param receivets
* @return
*/
public Map<String,String> receiveCCRequest(
String syscode,
String flowid,
String requestname,
String workflowname,
String nodename,
String pcurl,
String appurl,
String creator,
String createdatetime,
String receiver,
String receivedatetime,
String receivets,
String viewType
) {
Map<String, String> resultMap = new HashMap<String, String>();
String isremark = "8";
String creatorid = "0";
String createdate = "";
String createtime = "";
String receiverid = "0";
String receivedate = "";
String receivetime = "";
//校验时间戳
resultMap = validateReceivets(
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime,receivets);
if(!resultMap.isEmpty()){
return resultMap;
}
//校验创建日期时间
resultMap = validateCreateDateTime(createdatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
//校验flowid不能为空
resultMap = validateFlowid(createdatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(!resultMap.isEmpty()){
return resultMap;
}
createdate = createdatetime.substring(0,10);
createtime = createdatetime.length()>11 ? createdatetime.substring(11):createtime;
//校验接收日期时间
resultMap = validateReceiveDateTime(receivedatetime,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
receivedate = receivedatetime.substring(0,10);
receivetime = receivedatetime.length()>11 ? receivedatetime.substring(11):receivetime;
Map<String,String> OfsSettingMap = ofsSettingService.getOneMap();
String OfsSetting_isuse = OfsUtils.getStringValueByMapKey(OfsSettingMap,"isuse",OfsSetting.IsUse_No);//是否启用统一待办中心状态
//关闭统一待办中心状态
resultMap = validateOfsSettingIsuse(OfsSetting_isuse,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
int syscodeCnt = this.ofsSysInfoService.getCnt(syscode);//获取指定异构系统标识的数量
//记录系统日志:异构系统-检测-失败-异构系统标识【XXXX】未注册
resultMap = validateSyscode(syscodeCnt,
syscode, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
Map<String,String> OfsSysInfoMap = ofsSysInfoService.getOneMap(syscode);
int OfsSysInfo_sysid = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"sysid", OfsSysInfo.Default_SysId);//异构系统id
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人为空
resultMap = validateReceiver(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
String OfsSysInfo_HrmTransRule = OfsUtils.getStringValueByMapKey(OfsSysInfoMap, "hrmtransrule");//人员转换规则
creatorid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,creator);
receiverid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule,receiver);
//保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人不存在
resultMap = validateReceiverid(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
String OfsSysInfo_securityip = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"securityip");//异构许可ip
//检测当前IP是否在许可IP范围内
resultMap = validateOfsSysInfoSecurityIP(OfsSysInfo_securityip,this.clientIp,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
//记录系统日志:流程类型-检测-失败-流程类型未填写
resultMap = validateWorkflowname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
//保存失败,记录系统日志:流程数据-检测-失败-流程标题未填写
resultMap = validateRequestname(
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
int OfsSysInfo_receivewfdata = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"receivewfdata",OfsSysInfo.ReceiveWfData_No);//异构系统允许接收流程数据
//异构系统不允许接收流程数据
resultMap = validateOfsSysInfoReceiveWfData(OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
int OfsSysInfo_autocreatewftype = OfsUtils.getIntValueByMapKey(OfsSysInfoMap,"autocreatewftype",OfsSysInfo.AutoCreateWfType_No);//异构系统自动创建流程类型
int workflownameCnt = ofsWorkflowService.getCnt(OfsSysInfo_sysid,workflowname);//是否新流程类型1旧0新
//异构系统的【自动创建流程类型】关闭 并且 流程类型不存在
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCnt(OfsSysInfo_autocreatewftype,workflownameCnt,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
//异构系统的【自动创建流程类型】开启 并且 流程类型不存在,自动新增流程类型
resultMap = validateOfsSysInfoAutoCreateWfTypeAndWorkflownameCntAndAuto(
OfsSysInfo_autocreatewftype, workflownameCnt,OfsSysInfo_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
//根据异构系统id和流程类型名称获取异构系统流程类型信息
Map<String,String> OfsWorkflowMap = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname);
int OfsWorkflow_workflowid = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"workflowid",OfsWorkflow.Default_WorkflowId);//获取异构系统流程类型id
//TODO 创建成功,添加默认选中
log.error("flowid:"+OfsWorkflow_workflowid);
int OfsWorkflow_receivewfdata = OfsUtils.getIntValueByMapKey(OfsWorkflowMap,"receivewfdata",OfsWorkflow.ReceiveWfData_No);//接收流程数据
//流程类型不允许接收流程数据
resultMap = validateOfsWorkflowReceiveWfData(OfsWorkflow_receivewfdata,
syscode,OfsSysInfo_sysid, flowid, requestname, workflowname,nodename,isremark, pcurl, appurl,
creator, creatorid, createdate, createtime,
receiver,receiverid, receivedate,receivetime);
if(resultMap.size()>1){
return resultMap;
}
String flowguid = syscode + LINK_CHAR + OfsWorkflow_workflowid + LINK_CHAR + flowid + LINK_CHAR + receiver;
int requestid = ofsTodoDataService.buildRequestid(OfsSysInfo_sysid,OfsWorkflow_workflowid,flowid);
int OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);//主键
String returnMessage = "";
if(OfsTodoData_id == OfsTodoData.Default_TodoDataId){//流程数据不存在
//新增流程数据;
boolean OfsTodoData_insert_flag = ofsTodoDataService.receiveCCRequest(
syscode,
OfsSysInfo_sysid+"",
requestid+"",
flowid,
flowguid,
requestname,
workflowname,
OfsWorkflow_workflowid+"",
nodename,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,
receivets,
viewType
);
if(!OfsTodoData_insert_flag){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003850,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003851,weaver.general.ThreadVarLanguage.getLang())+"";
//获取主键
OfsTodoData_id = ofsTodoDataService.getTodoDataId(syscode,flowid,receiver);
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,receivets
);
}else{//流程数据存在
//更新 流程数据
boolean OfsTodoData_update_flag = ofsTodoDataService.updateCCRequest(
OfsTodoData_id+"",
syscode,
OfsSysInfo_sysid+"",
requestid+"",
flowid,
flowguid,
requestname,
workflowname,
OfsWorkflow_workflowid+"",
nodename,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,
receivets,
viewType
);
if(!OfsTodoData_update_flag){//保存失败,记录系统日志:流程数据-自动创建-失败-流程数据【XXXX】保存失败
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003852,weaver.general.ThreadVarLanguage.getLang())+"";
return saveLog(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Failure,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime
);
}
returnMessage = ""+ SystemEnv.getHtmlLabelName(10003831,weaver.general.ThreadVarLanguage.getLang())+""+requestname+"】"+ SystemEnv.getHtmlLabelName(10003853,weaver.general.ThreadVarLanguage.getLang())+"";
ofsLogService.insert(
OfsSysInfo_sysid+"",
OfsLog.DataType_WfData + LINK_CHAR + OfsTodoData_id,
OfsLog.OperType_AutoEdit,
OfsLog.OperResult_Success,
returnMessage,
syscode,
flowid,
requestname,
workflowname,
nodename,
isremark,
pcurl,
appurl,
creator,
creatorid,
createdate,
createtime,
receiver,
receiverid,
receivedate,
receivetime,receivets
);
}
Map<String, String> msgUrlMap = updatePcurlAndAppurl(pcurl, appurl, OfsSysInfoMap, OfsTodoData_id, flowid);
String OfsSysInfo_sysname = buildSysName(OfsSettingMap,OfsSysInfoMap);//系统显示名称
sendMessage(
OfsSettingMap,
OfsSysInfoMap,
OfsSysInfo_sysname,
workflowname,
requestname,
msgUrlMap.get("pcurl"),
msgUrlMap.get("appurl"),
creatorid,
createdate,
createtime,
receiverid,
receivedate,
receivetime,
OfsTodoData_id,
requestid
);
Map<String, String> stringStringMap = buildReceiveTodoRequest(
syscode,
OfsLog.DataType_WfData,
OfsLog.OperType_AutoNew,
OfsLog.OperResult_Success,
returnMessage
);
return stringStringMap;
}
}