/* * * Copyright (c) 2001-2016 泛微软件. * 泛微协同商务系统,版权所有. * */ package weaver.ofs.manager; import com.alibaba.fastjson.JSON; 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_DataCache; import com.cloudstore.dev.api.util.Util_Message; import com.engine.msgcenter.biz.ConfigManager; import com.engine.msgcenter.biz.WeaMessageTypeConfig; import com.engine.workflow.biz.requestSubmit.RequestOperationBiz; import com.google.common.collect.Sets; import net.sf.json.JSONArray; import org.apache.commons.lang3.StringUtils; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.xml.sax.InputSource; import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; import weaver.integration.cache.OfsSysInfoCacheNew; import weaver.integration.logging.Logger; import weaver.integration.logging.LoggerFactory; import weaver.ofs.bean.*; import weaver.ofs.dao.OfsSettingCacheDAO; import weaver.ofs.dao.OfsSysInfoCacheDAO; import weaver.ofs.dao.OfsWorkflowCacheDAO; import weaver.ofs.manager.remind.*; import weaver.ofs.manager.utils.OfsTodoDataUtils; import weaver.ofs.mq.bean.AsyncListenerBean; import weaver.ofs.mq.init.InitOfsMqMonitor; import weaver.ofs.mq.publisher.OfsMqSendMessage; import weaver.ofs.mq.selector.QueueSelector; import weaver.ofs.mq.util.OfsCacheLockUtil; import weaver.ofs.service.*; import weaver.ofs.util.OfsUtils; import weaver.ofs.utils.CheckIP; import weaver.rtx.RTXConfig; import weaver.security.util.SecurityMethodUtil; import weaver.systeminfo.SystemEnv; import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.URL; import java.util.*; import java.util.regex.Pattern; /** * 统一待办数据处理类 * * @version 1.0 */ public class OfsTodoDataManagerNew implements IOfsTodoDataManager { public void isAnalysis() { // OfsSettingCacheNew ofsSettingCacheNew = new OfsSettingCacheNew(); // ofsSettingCacheNew.next(); OfsSettingCacheDAO ofsSettingCacheDAO = new OfsSettingCacheDAO(); OfsSetting ofsSettingCache = ofsSettingCacheDAO.getOfsSettingCache(); if ("1".equals(ofsSettingCache.getInvokewsLog()) || "1".equals(ofsSettingCache.getInvokerestLog())) { OfsTodoDataManagerNewProxy proxy = new OfsTodoDataManagerNewProxy(this); ofsTodoDataManager = proxy.getOfsManager(); } else { ofsTodoDataManager = this; } } /** * 统一待办业务处理对象 */ private IOfsTodoDataManager ofsTodoDataManager = null; public Map jsonToMap(String json) { return (Map) JSON.parse(json); } public Map xmlToMap(String xml) { Map map = new HashMap(); try { xml = SecurityMethodUtil.clearEntity(xml); if (xml == null || "".equals(xml)) return map; Document doc = parseText(xml); if (doc == null) return map; Element root = doc.getRootElement(); for (Iterator iterator = root.elementIterator(); iterator.hasNext(); ) { Element e = (Element) iterator.next(); if ("custom".equals(e.getName())) { Map map2 = new HashMap(); List list = e.elements(); for (int i = 0; i < list.size(); i++) { Element e2 = (Element) list.get(i); map2.put(e2.getName(), e2.getText()); } map.put(e.getName(), map2); } else { map.put(e.getName(), e.getText()); } } } catch (Exception e) { log.error("xml 转map 异常", e); } return map; } public Document parseText(String text) throws Exception { Document result = null; SAXReader reader = new SAXReader(); reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); reader.setFeature("http://xml.org/sax/features/external-general-entities", false); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); String encoding = getEncoding(text); InputSource source = new InputSource(new StringReader(text)); source.setEncoding(encoding); result = reader.read(source); if (result.getXMLEncoding() == null) { result.setXMLEncoding(encoding); } return result; } private String getEncoding(String text) { String result = null; String xml = text.trim(); if (xml.startsWith(""); String sub = xml.substring(0, end); StringTokenizer tokens = new StringTokenizer(sub, " =\"'"); while (tokens.hasMoreTokens()) { String token = tokens.nextToken(); if ("encoding".equals(token)) { if (tokens.hasMoreTokens()) { result = tokens.nextToken(); } break; } } } return result; } /** * 日志打印对象 */ public static Logger log = LoggerFactory.getLogger("ofs", OfsTodoDataManagerNew.class.getName()); /** * 系统管理员ID */ public static final String SYSADMIN_ID = "1"; /** * 待办信息处理返回xml结果根元素 */ public static final String RESULT_XML_ROOT = "ResultInfo"; /** * 缺省数据id */ public static final int DEFAULT_DATA_ID = 0;//缺省数据id /** * 下划线分隔符 */ public static final String LINK_CHAR = "_"; /** * 统一待办数据处理对象 */ public static OfsTodoDataServiceNew ofsTodoDataService = new OfsTodoDataServiceNew(); /** * 统一待办系统信息对象 */ public static OfsSysInfoService ofsSysInfoService = new OfsSysInfoService(); /** * 统一待办流程对象 */ public static OfsWorkflowService ofsWorkflowService = new OfsWorkflowService(); /** * 统一待办设置业务对象 */ private OfsSettingService ofsSettingService = new OfsSettingService(); /** * 统一待办处理日志记录对象 */ public static OfsLogServiceNew ofsLogService = new OfsLogServiceNew(); public static OfsRequestBaseService ofsRequestBaseService = new OfsRequestBaseService(); public static OfsDoneDataService ofsDoneDataService = new OfsDoneDataService(); public static OfsMqSendMessage ofsMqSendMessage = new OfsMqSendMessage(); /** * 访问Ip */ public String clientIp;//访问Ip private boolean isCheckIP = true;//是否校验 IP private boolean isAuto = true;//是否自动 private final boolean isSnowflake = InitOfsMqMonitor.isSnowflake;//是否开启雪花算法 private final String queuePrefix = InitOfsMqMonitor.queuePrefix;//队列的前缀 private final Integer queueCount = InitOfsMqMonitor.queueCount;//分的队列个数 public void setIsCheckIP(boolean isCheckIP) { this.isCheckIP = isCheckIP; } public void setIsAuto(boolean isAuto) { this.isAuto = isAuto; } /** * 获取访问Ip */ public String getClientIp() { return clientIp; } /** * 设置访问Ip */ public void setClientIp(String clientIp) { this.clientIp = clientIp; } /** * 接收待办流程 */ public Map receiveTodoRequestByMap(Map dataMap) { // 业务数据 dataMap.put("isremark", OfsTodoData.IsRemark_Todo); dataMap.put("viewtype", OfsTodoData.ViewType_None); dataMap.put("iscomplete", OfsTodoData.IsComplete_No); //TODO 如果已经解析完成不用再次解析 Object custom = dataMap.get("custom"); if (custom instanceof Map) { } else { String str = (String) dataMap.get("custom"); Map map = xmlToMap(str); dataMap.put("custom", map); } return this.receiveRequestInfo(dataMap, "todo"); } /** * 接收待办流程(json格式) */ public String receiveTodoRequestByJson(String json) { Map dataMap = this.jsonToMap(json); Map resultMap = this.receiveTodoRequestByMap(dataMap); return OfsUtils.mapToJson(resultMap); } /** * 接收待办流程(xml格式) */ public String receiveTodoRequestByXml(String xml) { Map dataMap = this.xmlToMap(xml); Map resultMap = this.receiveTodoRequestByMap(dataMap); return OfsUtils.mapToXml(resultMap, RESULT_XML_ROOT); } /** * 接收异构系统流程(map格式) */ public Map receiveRequestInfoByMap(Map dataMap) { //TODO 如果已经解析完成不用再次解析 Object custom = dataMap.get("custom"); if (custom instanceof Map) { } else { String str = (String) dataMap.get("custom"); Map map = xmlToMap(str); dataMap.put("custom", map); } return this.receiveRequestInfo(dataMap, "info"); } /** * 删除异构系统流程(map格式) */ public Map deleteRequestInfoByMap(Map dataMap) { String syscode = Util.null2String((String) dataMap.get("syscode")); String flowid = Util.null2String((String) dataMap.get("flowid")); return this.deleteRequestInfo( syscode, flowid ); } /** * 删除异构系统流程(json格式) */ public String deleteRequestInfoByJson(String json) { Map dataMap = this.jsonToMap(json); Map resultMap = this.deleteRequestInfoByMap(dataMap); return OfsUtils.mapToJson(resultMap); } /** * 删除异构系统流程(xml格式) */ public String deleteRequestInfoByXML(String xml) { Map dataMap = this.xmlToMap(xml); Map resultMap = this.deleteRequestInfoByMap(dataMap); return OfsUtils.mapToXml(resultMap, RESULT_XML_ROOT); } /** * 删除用户异构系统流程(map格式) */ public Map deleteUserRequestInfoByMap(Map dataMap) { String syscode = Util.null2String((String) dataMap.get("syscode")); String flowid = Util.null2String((String) dataMap.get("flowid")); String userid = Util.null2String((String) dataMap.get("userid")); if (StringUtils.isBlank(userid)) { userid = Util.null2String((String) dataMap.get("receiver")); } return this.deleteUserRequestInfo( syscode, flowid, userid ); } /** * 根据用户id删除异构系统流程(json格式) */ public String deleteUserRequestInfoByJson(String json) { Map dataMap = this.jsonToMap(json); Map resultMap = this.deleteUserRequestInfoByMap(dataMap); return OfsUtils.mapToJson(resultMap); } /** * 根据用户id删除异构系统流程(xml格式) */ public String deleteUserRequestInfoByXML(String xml) { Map dataMap = this.xmlToMap(xml); Map resultMap = this.deleteUserRequestInfoByMap(dataMap); return OfsUtils.mapToXml(resultMap, RESULT_XML_ROOT); } /** * 接收异构系统流程(json格式) */ public String receiveRequestInfoByJson(String json) { Map dataMap = this.jsonToMap(json); Map resultMap = this.receiveRequestInfoByMap(dataMap); return OfsUtils.mapToJson(resultMap); } /** * 接收异构系统流程(xml格式) */ public String receiveRequestInfoByXml(String xml) { Map dataMap = this.xmlToMap(xml); Map resultMap = this.receiveRequestInfoByMap(dataMap); return OfsUtils.mapToXml(resultMap, RESULT_XML_ROOT); } public int buildRequestid(OfsTodoData data) { String requestid = ofsRequestBaseService.buildRequestid(data) + ""; return Util.getIntValue(requestid); } public String buildRequestidForSnowflake(OfsTodoData data) { return ofsRequestBaseService.buildRequestidForSnowflake(data) + ""; } public synchronized int getTodoDataId(OfsTodoData data) { int todoDataId = ofsTodoDataService.getTodoDataId(data.getSyscode(), data.getFlowid(), data.getUserid()); return todoDataId; } @Override public synchronized int getDoneDataId(OfsTodoData data) { int doneDataId = ofsDoneDataService.getDoneDataId(data.getSyscode(), data.getFlowid(), data.getUserid()); return doneDataId; } private Map isAuto(OfsTodoData data) { Map map = new HashMap<>(); if (this.isAuto) { map.put("isauto", "" + SystemEnv.getHtmlLabelName(81855, weaver.general.ThreadVarLanguage.getLang()) + ""); if ("0".equals(data.getId()) && "0".equals(data.getFlowguid())) { map.put("type", OfsLog.OperType_AutoNew); } else { map.put("type", OfsLog.OperType_AutoEdit); } } else { map.put("isauto", "" + SystemEnv.getHtmlLabelName(125582, weaver.general.ThreadVarLanguage.getLang()) + ""); if ("0".equals(data.getId()) && "0".equals(data.getFlowguid())) { map.put("type", OfsLog.OperType_New); } else { map.put("type", OfsLog.OperType_Edit); } } return map; } private void copy(OfsTodoData source, OfsTodoData target) { try { Field[] fields = OfsTodoData.class.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; String fieldName = field.getName(); if (!fieldName.equals("custom") && !fieldName.equals("flowguid") && !fieldName.equals("id") && !fieldName.equals("isremark") && !fieldName.equals("viewtype") && !fieldName.equals("operatedate") && !fieldName.equals("operatetime") && !fieldName.equals("receivets") && !fieldName.equals("isauto") ) { field.setAccessible(true); Object o = field.get(target); if (o == null) { field.set(target, field.get(source)); } if (o instanceof String) { String str = (String) o; if (StringUtils.isBlank(str)) { field.set(target, field.get(source)); } } } } } catch (IllegalAccessException e) { e.printStackTrace(); log.error("复制数据异常", e); } } public String saveData(OfsSysInfo ofsSysInfoCache, OfsTodoData data) { String isremark = data.getIsremark(); String viewtype = data.getViewtype(); String requestname = data.getRequestname(); String pcurl = data.getPcurl(); String appurl = data.getAppurl(); String nodename = data.getNodename(); String workflowname = data.getWorkflowname(); String isremarkName = buildIsRemarkName(data); String OfsSysInfo_sysname = ofsTodoDataManager.buildSysName(data);//系统显示名称 String OfsLog_OperType = OfsLog.OperType_AutoNew; String operresult = OfsLog.OperResult_Success; String returnMessage = ""; int todoDataId = 0; // 从redis中获取数据是否存在 String key = data.getSyscode() + "_" + data.getFlowid() + "_" + data.getUserid(); Map cache = null;//(Map)Util_DataCache.getObjVal(key); String isremarkcache = ""; /*if(cache != null){ todoDataId = Util.getIntValue(cache.get("id"),0); isremarkcache = cache.get("isremark"); data.setId(todoDataId+""); }*/ // boolean issend = false; if ("0".equals(data.getIsremark()) || "8".equals(data.getIsremark())) { if ("0".equals(data.getId()) || !isremarkcache.equals(data.getIsremark())) { todoDataId = ofsTodoDataManager.getTodoDataId(data); data.setId(todoDataId + ""); } int doneDataId = ofsTodoDataManager.getDoneDataId(data); data.setFlowguid(doneDataId + ""); Map auto = isAuto(data); OfsLog_OperType = auto.get("type"); if ("0".equals(data.getId())) {//流程数据不存在 boolean flag = isNeedUpdate(cache, data); if (flag) { /** * TODO 更改下逻辑 * 1 先删除数据 * 2 获取删除的结果,如果删除影响0行 * 3 就不添加新的数据 * 4 那待办和已办都没有,怎么办? * * */ //保存流程数据 boolean OfsTodoData_insert_flag = ofsTodoDataService.receiveRequestInfoInsert(data); if (!(OfsTodoData_insert_flag)) { boolean OfsTodoData_update_flag = ofsTodoDataService.receiveRequestInfoUpdate(data); if (!(OfsTodoData_update_flag)) { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(83946, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(498, weaver.general.ThreadVarLanguage.getLang()) + ""; operresult = OfsLog.OperResult_Failure; } else { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; } } else { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(83946, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; if (!"0".equals(data.getFlowguid())) { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; } } if (!OfsLog.OperResult_Failure.equals(operresult)) { //获取主键 int id = ofsTodoDataService.getTodoDataId(data.getSyscode(), data.getFlowid(), data.getUserid()); data.setId(id + ""); Map map = new HashMap<>(); map.put("requestid", data.getRequestid()); map.put("receivets", data.getReceivets()); map.put("isremark", data.getIsremark()); map.put("id", id + ""); Util_DataCache.setObjVal(key, map, 60 * 60 * 24); //删除已办数据 boolean delete = ofsDoneDataService.delete(data.getSyscode(), data.getFlowid(), data.getUserid()); //ofsTodoDataManager.updatePcurlAndAppurl(ofsSysInfoCacheNew,data); //待办才发送消息提醒 if ((isremark.equals(OfsTodoData.IsRemark_Todo) || isremark.equals("8") || isremark.equals("9")) && viewtype.equals(OfsTodoData.ViewType_None)) { // TODO 注意 待办和已办 要处理一个是否按照时间戳更新的逻辑 ofsTodoDataManager.sendMessage(ofsSysInfoCache, OfsSysInfo_sysname, data); } } } else { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(83946, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "," + SystemEnv.getHtmlLabelName(389993, weaver.general.ThreadVarLanguage.getLang()) + "," + SystemEnv.getHtmlLabelName(507856, weaver.general.ThreadVarLanguage.getLang()) + SystemEnv.getHtmlLabelName(567, weaver.general.ThreadVarLanguage.getLang()) + SystemEnv.getHtmlLabelName(23989, weaver.general.ThreadVarLanguage.getLang()) + "【receivets:" + data.getReceivets() + "】"; } } else { boolean flag = isNeedUpdate(cache, data); if (flag) { //数据存在,做更新操作 保存流程数据; boolean OfsTodoData_update_flag = ofsTodoDataService.receiveRequestInfoUpdate(data); if (!(OfsTodoData_update_flag)) { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(498, weaver.general.ThreadVarLanguage.getLang()) + ""; operresult = OfsLog.OperResult_Failure; } else { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; //删除已办数据 boolean delete = ofsDoneDataService.delete(data.getSyscode(), data.getFlowid(), data.getUserid()); Map map = new HashMap<>(); map.put("requestid", data.getRequestid()); map.put("receivets", data.getReceivets()); map.put("isremark", data.getIsremark()); map.put("id", data.getId()); Util_DataCache.setObjVal(key, map, 60 * 60 * 24); //ofsTodoDataManager.updatePcurlAndAppurl(ofsSysInfoCacheNew,data); //待办才发送消息提醒 if ((isremark.equals(OfsTodoData.IsRemark_Todo) || isremark.equals("8") || isremark.equals("9")) && viewtype.equals(OfsTodoData.ViewType_None)) { // TODO 注意 待办和已办 要处理一个是否按照时间戳更新的逻辑 ofsTodoDataManager.sendMessage(ofsSysInfoCache, OfsSysInfo_sysname, data); } } } else { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "," + SystemEnv.getHtmlLabelName(389993, weaver.general.ThreadVarLanguage.getLang()) + "," + SystemEnv.getHtmlLabelName(507856, weaver.general.ThreadVarLanguage.getLang()) + SystemEnv.getHtmlLabelName(567, weaver.general.ThreadVarLanguage.getLang()) + SystemEnv.getHtmlLabelName(23989, weaver.general.ThreadVarLanguage.getLang()) + "【receivets:" + data.getReceivets() + "】"; } } } else if ("2".equals(data.getIsremark()) || "4".equals(data.getIsremark())) { // TODO 非待办从已办表查询todoDataId if ("0".equals(data.getId()) || !isremarkcache.equals(data.getIsremark())) { todoDataId = ofsTodoDataManager.getDoneDataId(data); } int id = ofsTodoDataManager.getTodoDataId(data); if (id == 0) { } else { OfsTodoData one = ofsTodoDataService.getOneBean(id); String isremarkbak = data.getIsremark(); String receivets = data.getReceivets(); //BeanUtils.copyProperties(one,data); copy(one, data); //单点登录地址 String pcentranceurl = ofsSysInfoCache.getPcentranceurl(); String appentranceurl = ofsSysInfoCache.getAppentranceurl(); data.setIsremark(isremarkbak); data.setViewtype(viewtype); data.setReceivets(receivets); data.setRequestname(requestname); data.setPcurl(pcurl); data.setAppurl(appurl); data.setNodename(nodename); data.setWorkflowname(workflowname); if (StringUtils.isBlank(pcurl)) { data.setPcurl(one.getPcurl()); if (StringUtils.isNotBlank(pcentranceurl)) {//兼容历史数据 历史数据 有中转页面 pcurl 和 pcurlsrc 不一致 data.setPcurl(one.getPcurlsrc()); } } if (StringUtils.isBlank(appurl)) { data.setAppurl(one.getAppurl()); if (StringUtils.isNotBlank(appentranceurl)) {//兼容历史数据 历史数据 有中转页面 appurl 和 appurlsrc 不一致 data.setAppurl(one.getAppurlsrc()); } } } data.setFlowguid(id + ""); data.setId(todoDataId + ""); Map auto = isAuto(data); OfsLog_OperType = auto.get("type"); if ("0".equals(data.getId())) { boolean isNeedUpdate = isNeedUpdate(cache, data); if (isNeedUpdate) { //保存流程数据 boolean flag = ofsDoneDataService.receiveRequestInfoInsert(data); if (!(flag)) { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(83946, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(498, weaver.general.ThreadVarLanguage.getLang()) + ""; operresult = OfsLog.OperResult_Failure; } else { //删除待办数据 boolean delete = ofsTodoDataService.delete(data.getSyscode(), data.getFlowid(), data.getUserid()); returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(83946, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; int doneDataId = ofsDoneDataService.getDoneDataId(data.getSyscode(), data.getFlowid(), data.getUserid()); data.setId(doneDataId + ""); Map map = new HashMap<>(); map.put("requestid", data.getRequestid()); map.put("receivets", data.getReceivets()); map.put("isremark", data.getIsremark()); map.put("id", doneDataId + ""); Util_DataCache.setObjVal(key, map, 60 * 60 * 24); // 新建的已办数据,加一个已办的消息 /*if(id == 0){ issend = true; }*/ if (!"0".equals(data.getFlowguid())) { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; } } } else { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "," + SystemEnv.getHtmlLabelName(389993, weaver.general.ThreadVarLanguage.getLang()) + "," + SystemEnv.getHtmlLabelName(507856, weaver.general.ThreadVarLanguage.getLang()) + SystemEnv.getHtmlLabelName(567, weaver.general.ThreadVarLanguage.getLang()) + SystemEnv.getHtmlLabelName(23989, weaver.general.ThreadVarLanguage.getLang()) + "【receivets:" + data.getReceivets() + "】"; } } else { boolean isNeedUpdate = isNeedUpdate(cache, data); if (isNeedUpdate) { //数据存在,做更新操作 保存流程数据; boolean flag = ofsDoneDataService.receiveRequestInfoUpdate(data); if (!(flag)) { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(498, weaver.general.ThreadVarLanguage.getLang()) + ""; operresult = OfsLog.OperResult_Failure; } else { //删除待办数据 boolean delete = ofsTodoDataService.delete(data.getSyscode(), data.getFlowid(), data.getUserid()); returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; Map map = new HashMap<>(); map.put("requestid", data.getRequestid()); map.put("receivets", data.getReceivets()); map.put("isremark", data.getIsremark()); map.put("id", data.getId()); Util_DataCache.setObjVal(key, map, 60 * 60 * 24); } } else { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "," + SystemEnv.getHtmlLabelName(389993, weaver.general.ThreadVarLanguage.getLang()) + "," + SystemEnv.getHtmlLabelName(507856, weaver.general.ThreadVarLanguage.getLang()) + SystemEnv.getHtmlLabelName(567, weaver.general.ThreadVarLanguage.getLang()) + SystemEnv.getHtmlLabelName(23989, weaver.general.ThreadVarLanguage.getLang()) + "【receivets:" + data.getReceivets() + "】"; } } //ofsTodoDataManager.updatePcurlAndAppurlInDone(ofsSysInfoCacheNew,data); /*if (issend){ ofsTodoDataManager.sendMessage(ofsSysInfoCacheNew,OfsSysInfo_sysname,data); }*/ User user = new User(Integer.parseInt(data.getUserid())); RequestOperationBiz.addWorkflowCount(Integer.parseInt(data.getWorkflowid()), user); //将所有已办且iscomplete=0变更为iscomplete=1;不处理待办情况 boolean b = ofsDoneDataService.processOverRequestComplete(data.getSyscode(), data.getFlowid()); } else if (StringUtils.isBlank(isremark)) { int idTodo = ofsTodoDataManager.getTodoDataId(data); int idDone = ofsTodoDataManager.getDoneDataId(data); Map auto = isAuto(data); OfsLog_OperType = auto.get("type"); if (idTodo == 0 && idDone == 0) { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + SystemEnv.getHtmlLabelName(23084, weaver.general.ThreadVarLanguage.getLang()) + ""; ofsTodoDataManager.saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + data.getId(), OfsLog_OperType, operresult, returnMessage, data); return "-2"; } else { boolean isNeedUpdate = isNeedUpdate(cache, data); if (isNeedUpdate) { if (idTodo > 0) { //数据存在,做更新操作 保存流程数据; boolean OfsTodoData_update_flag = ofsTodoDataService.receiveRequestInfoUpdate(data); if (!(OfsTodoData_update_flag)) { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + SystemEnv.getHtmlLabelName(25425, weaver.general.ThreadVarLanguage.getLang()) + "" + SystemEnv.getHtmlLabelName(498, weaver.general.ThreadVarLanguage.getLang()) + ""; operresult = OfsLog.OperResult_Failure; } else { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + SystemEnv.getHtmlLabelName(25425, weaver.general.ThreadVarLanguage.getLang()) + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; } } if (idDone > 0) { boolean flag = ofsDoneDataService.receiveRequestInfoUpdate(data); if (!(flag)) { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + SystemEnv.getHtmlLabelName(25425, weaver.general.ThreadVarLanguage.getLang()) + "" + SystemEnv.getHtmlLabelName(498, weaver.general.ThreadVarLanguage.getLang()) + ""; operresult = OfsLog.OperResult_Failure; } else { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + SystemEnv.getHtmlLabelName(25425, weaver.general.ThreadVarLanguage.getLang()) + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; } } } else { returnMessage = "" + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + requestname + "】" + auto.get("isauto") + "" + SystemEnv.getHtmlLabelName(130625, weaver.general.ThreadVarLanguage.getLang()) + "" + SystemEnv.getHtmlLabelName(25425, weaver.general.ThreadVarLanguage.getLang()) + "," + SystemEnv.getHtmlLabelName(389993, weaver.general.ThreadVarLanguage.getLang()) + "," + SystemEnv.getHtmlLabelName(507856, weaver.general.ThreadVarLanguage.getLang()) + SystemEnv.getHtmlLabelName(567, weaver.general.ThreadVarLanguage.getLang()) + SystemEnv.getHtmlLabelName(23989, weaver.general.ThreadVarLanguage.getLang()) + "【receivets:" + data.getReceivets() + "】"; } } } //TODO 设置消息已处理 // if((isremark.equals("2") || isremark.equals("4")) && !issend ){ Set userids = new HashSet(); userids.add(data.getUserid()); try { // Util_Message.updateBizState(userids,data.getSyscode()+"_"+data.getFlowid(),"1"); Map urlMap = getURL(ofsSysInfoCache, data); if (isremark.equals("2") || isremark.equals("4")) { Util_Message.updateBizState(userids, data.getSyscode() + "_" + data.getFlowid(), "1"); } } catch (Exception e) { log.error("消息已处理异常——userids:" + userids + ",syscode+_+flowid:" + data.getSyscode() + "_" + data.getFlowid() + ", state:1", e); } // } ofsTodoDataManager.saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + data.getId(), OfsLog_OperType, operresult, returnMessage, data); return operresult; } private boolean isNeedUpdate(Map cache, OfsTodoData data) { boolean flag = false; String receivetscache = "0"; /* if(cache != null){ receivetscache = cache.get("receivets"); if("0".equals(data.getId()) && "0".equals(data.getFlowguid())){ receivetscache = "0"; } }else{*/ OfsTodoData one = ofsTodoDataService.getOneNew(data.getSyscode(), data.getFlowid(), data.getUserid()); if (!Objects.isNull(one)) { if (StringUtils.isNotBlank(one.getReceivets()) && Long.valueOf(receivetscache) < Long.valueOf(one.getReceivets())) { receivetscache = one.getReceivets(); } } OfsTodoData oneBean = ofsDoneDataService.getOneNew(data.getSyscode(), data.getFlowid(), data.getUserid()); if (!Objects.isNull(oneBean)) { if (StringUtils.isNotBlank(oneBean.getReceivets()) && Long.valueOf(receivetscache) < Long.valueOf(oneBean.getReceivets())) { receivetscache = oneBean.getReceivets(); } } //} if (Long.valueOf(receivetscache) < Long.valueOf(data.getReceivets())) { flag = true; } return flag; } private Map getURL(OfsSysInfo ofsSysInfoCache, OfsTodoData data) { String OfsSysInfo_pcprefixurl = ofsSysInfoCache.getPcprefixurl();//PC地址前缀 String OfsSysInfo_appprefixurl = ofsSysInfoCache.getAppprefixurl();//APP地址前缀 // OfsSettingCacheNew ofsSettingCacheNew = new OfsSettingCacheNew(); // ofsSettingCacheNew.next(); String pcurl = data.getPcurl(); String appurl = data.getAppurl(); //待办才发送消息提醒 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 = ofsSysInfoCache.getAppentranceurl(); if (StringUtils.isNotBlank(appentranceurl)) { remindAppUrl = oaaddress + appurl; } String pcentranceurl = ofsSysInfoCache.getPcentranceurl(); 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); Map map = new HashMap<>(); map.put("linkUrl", remindPcUrl); map.put("linkMobileUrl", remindAppUrl); return map; } public OfsCustomDefinitionService ofsCustomDefinitionService = new OfsCustomDefinitionService(); public Map validateCustom(Map custom, OfsTodoData data) { String str = ""; List list = ofsCustomDefinitionService.query(); if (list.size() > 0) { if (custom == null) { custom = new HashMap<>(); } for (CustomDefinition c : list) { if (c.getEnable() != 1) { custom.remove(c.getDbname()); } if (c.getEnable() == 1 && c.getRequired() == 1) { String value = custom.get(c.getDbname()); if (StringUtils.isBlank(value)) { str += "," + c.getDbname(); } } } if (StringUtils.isNotBlank(str)) { str = str.substring(1); return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "自定义字段必填项【" + str + "】数据不能为空", data); } else { return null; } } else { return null; } } public OfsCustomDataService ofsCustomDataService = new OfsCustomDataService(); /** * 接收异构系统流程 */ public Map receiveRequestInfo(Map dataMap, String method) { isAnalysis(); // 1 封装接口数据 OfsTodoData data = ofsTodoDataManager.packageData(dataMap); String keyName = data.getSyscode() + "_" + data.getFlowid() + "_" + data.getReceiver(); try { if (!OfsCacheLockUtil.getLock(keyName, 1)) { return ofsTodoDataManager.saveLog("0", OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "调用接口并发过高,1000ms内禁止syscode + flowid + receiver相同的流程调用接口 ", data); } return this.receiveRequestInfo(data, method); } finally { OfsCacheLockUtil.unLock(keyName); } } public Map receiveRequestInfo(OfsTodoData data, String method) { // 获取自定义字段的数据 Map custom2 = data.getCustom(); Map custom = new HashMap<>(); if (custom2 != null && !custom2.isEmpty()) { Set keySet = custom2.keySet(); Object[] keys = keySet.toArray(); for (Object key : keys) { String k = (String) key; String value = custom2.get(k); custom.put(k.toUpperCase(), value); } } String returnMessage = ""; // 获取基本信息 /*OfsSysInfoCacheNew ofsSysInfoCacheNew = ofsTodoDataManager.getOfsSysInfoCache(data); if(ofsSysInfoCacheNew == null){ return saveLog(data.getSysid(),OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID,OfsLog.OperType_Check,OfsLog.OperResult_Failure,"异构系统标识【"+data.getSyscode()+"】未注册", data); }*/ // 2 校验数据 Map validate = ofsTodoDataManager.validate(data, method); if (validate != null && !validate.isEmpty()) { return validate; } // TODO 校验自定义字段 if (this.isAuto) { Map validateCustom = ofsTodoDataManager.validateCustom(custom, data); if (validateCustom != null && !validateCustom.isEmpty()) { return validateCustom; } } // OfsSysInfoCacheNew ofsSysInfoCacheNew = ofsTodoDataManager.getOfsSysInfoCache(data); OfsSysInfoCacheDAO ofsSysInfoCacheDAO = new OfsSysInfoCacheDAO(); OfsSysInfo ofsSysInfoCache = ofsSysInfoCacheDAO.getOfsSysInfoCacheBySysCode(data.getSyscode()); // 校验receiver Map map = ofsTodoDataManager.validateReceiver(ofsSysInfoCache, data); List datas = (List) map.get("datas"); String noexist = (String) map.get("noexist"); String exist = (String) map.get("exist"); AsyncListenerBean asyncListenerBean = new AsyncListenerBean(); asyncListenerBean.setTodoData(data); asyncListenerBean.setDataList(datas); asyncListenerBean.setCustom(custom); //region 判断是否发送消息到mq中 if (InitOfsMqMonitor.isSendmessage) { return sendTodoDataToMq(data, method, noexist, exist, asyncListenerBean); } //endregion 判断是否发送消息到mq中 if (Util.getIntValue(data.getRequestid(), 0) == 0) { log.info("是否开启雪花算法: " + isSnowflake); if (!isSnowflake) { //E9老逻辑,requestId没有使用雪花算法 int requestId = ofsTodoDataManager.buildRequestid(data); data.setRequestid(Util.null2String(requestId)); } else { //requestId使用雪花算法生成 String requestId = ofsTodoDataManager.buildRequestidForSnowflake(data); data.setRequestid(requestId); } } // 保存数据 for (OfsTodoData dataNew : datas) { dataNew.setRequestid(Util.null2String(data.getRequestid())); // 待办查待办表,做更新或者新增,同时删除已办数据(注:增加删除ofs_done_data) // 已办查已办表,做更新或者新增,同时删除待办数据(注意:ofs_log数据的关联需要修改——通过syscode、flowid、receiver关联数据) String saveResult = ofsTodoDataManager.saveData(ofsSysInfoCache, dataNew); // 保存自定义字段数据 if (this.isAuto) { if (custom != null && !custom.isEmpty()) { // TODO 将原来的数据dataid查出来,修改成新的dataid ofsTodoDataManager.saveOfsCustom(dataNew, custom); } } if ("0".equals(saveResult)) { if (StringUtils.isBlank(noexist)) { noexist = dataNew.getReceiver(); } else { noexist = noexist + "," + dataNew.getReceiver(); } } if ("-2".equals(saveResult)) { if (exist.contains(",")) { exist = exist.replace(dataNew.getReceiver() + ",", ""); } else { exist = exist.replace(dataNew.getReceiver(), ""); } returnMessage += "," + SystemEnv.getHtmlLabelName(10003831, weaver.general.ThreadVarLanguage.getLang()) + "" + data.getRequestname() + "】" + SystemEnv.getHtmlLabelName(23084, weaver.general.ThreadVarLanguage.getLang()) + ""; } } if (returnMessage.length() > 1) { returnMessage = returnMessage.substring(1); } String OfsLog_OperType = OfsLog.OperType_Check; String operresult = OfsLog.OperResult_Success; String isremarkName = ofsTodoDataManager.buildIsRemarkName2(data, method); // 有不存在的数据,返回提示失败的数据 if (StringUtils.isNotBlank(noexist) && StringUtils.isNotBlank(exist)) { returnMessage += "" + SystemEnv.getHtmlLabelName(10003854, weaver.general.ThreadVarLanguage.getLang()) + "" + data.getRequestname() + "】" + SystemEnv.getHtmlLabelName(10003855, weaver.general.ThreadVarLanguage.getLang()) + "" + noexist + "】——" + SystemEnv.getHtmlLabelName(10003856, weaver.general.ThreadVarLanguage.getLang()) + "" + ";【" + exist + "】——" + SystemEnv.getHtmlLabelName(10003857, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; OfsLog_OperType = OfsLog.OperType_Check; operresult = OfsLog.OperResult_Failure; } else if (StringUtils.isNotBlank(noexist) && StringUtils.isBlank(exist)) { returnMessage += "" + SystemEnv.getHtmlLabelName(10003854, weaver.general.ThreadVarLanguage.getLang()) + "" + data.getRequestname() + "】" + SystemEnv.getHtmlLabelName(10003855, weaver.general.ThreadVarLanguage.getLang()) + "" + noexist + "】——" + SystemEnv.getHtmlLabelName(10003858, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(563, weaver.general.ThreadVarLanguage.getLang()) + ""; OfsLog_OperType = OfsLog.OperType_Check; operresult = OfsLog.OperResult_Failure; } else if (StringUtils.isBlank(noexist) && StringUtils.isBlank(exist)) { } else { returnMessage += "" + SystemEnv.getHtmlLabelName(10003854, weaver.general.ThreadVarLanguage.getLang()) + "" + data.getRequestname() + "】," + "【" + exist + "】——" + SystemEnv.getHtmlLabelName(10003857, weaver.general.ThreadVarLanguage.getLang()) + "" + isremarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; } /*if(OfsLog.OperResult_Failure.equals(operresult)){ saveLog(data.getSysid(),OfsLog.DataType_WfData+ LINK_CHAR + DEFAULT_DATA_ID,OfsLog_OperType,operresult,returnMessage,data); }*/ return ofsTodoDataManager.buildReceiveTodoRequest( data.getSyscode(), OfsLog.DataType_WfData, OfsLog_OperType, operresult, returnMessage ); } private Map sendTodoDataToMq(OfsTodoData data, String method, String noexist, String exist, AsyncListenerBean asyncListenerBean) { String returnMessage = ""; String ofsLogOperType = OfsLog.OperType_Check; String operResult = OfsLog.OperResult_Success; String isRemarkName = ofsTodoDataManager.buildIsRemarkName2(data, method); if (StringUtils.isNotBlank(noexist) && StringUtils.isBlank(exist)) { returnMessage += "" + SystemEnv.getHtmlLabelName(10003854, weaver.general.ThreadVarLanguage.getLang()) + "" + data.getRequestname() + "】" + SystemEnv.getHtmlLabelName(10003855, weaver.general.ThreadVarLanguage.getLang()) + "" + noexist + "】——" + SystemEnv.getHtmlLabelName(10003858, weaver.general.ThreadVarLanguage.getLang()) + "" + isRemarkName + "" + SystemEnv.getHtmlLabelName(563, weaver.general.ThreadVarLanguage.getLang()) + ""; ofsLogOperType = OfsLog.OperType_Check; operResult = OfsLog.OperResult_Failure; return ofsTodoDataManager.buildReceiveTodoRequest( data.getSyscode(), OfsLog.DataType_WfData, ofsLogOperType, operResult, returnMessage ); } // 将同一条流程发送到同一个队列中 int shardingKey = QueueSelector.getShardingKey(data.getSyscode() + data.getFlowid(), queueCount); String routingkey = queuePrefix + "_" + shardingKey; log.info("使用的队列为:" + routingkey); boolean sendMessageFlag = ofsMqSendMessage.sendMessage(JSON.toJSONString(asyncListenerBean), routingkey); if (!sendMessageFlag) { return ofsTodoDataManager.buildReceiveTodoRequest( data.getSyscode(), OfsLog.DataType_WfData, ofsLogOperType, OfsLog.OperResult_Failure, "流程数据发送到mq中失败!!" ); } // 有不存在的数据,返回提示失败的数据 if (StringUtils.isNotBlank(noexist) && StringUtils.isNotBlank(exist)) { returnMessage += "" + SystemEnv.getHtmlLabelName(10003854, weaver.general.ThreadVarLanguage.getLang()) + "" + data.getRequestname() + "】" + SystemEnv.getHtmlLabelName(10003855, weaver.general.ThreadVarLanguage.getLang()) + "" + noexist + "】——" + SystemEnv.getHtmlLabelName(10003856, weaver.general.ThreadVarLanguage.getLang()) + "" + ";【" + exist + "】——" + SystemEnv.getHtmlLabelName(10003857, weaver.general.ThreadVarLanguage.getLang()) + "" + isRemarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; ofsLogOperType = OfsLog.OperType_Check; operResult = OfsLog.OperResult_Failure; } else if (StringUtils.isBlank(noexist) && StringUtils.isBlank(exist)) { } else { returnMessage += "" + SystemEnv.getHtmlLabelName(10003854, weaver.general.ThreadVarLanguage.getLang()) + "" + data.getRequestname() + "】," + "【" + exist + "】——" + SystemEnv.getHtmlLabelName(10003857, weaver.general.ThreadVarLanguage.getLang()) + "" + isRemarkName + "" + SystemEnv.getHtmlLabelName(25008, weaver.general.ThreadVarLanguage.getLang()) + ""; } returnMessage += "; 流程数据已发送到mq中。"; return ofsTodoDataManager.buildReceiveTodoRequest( data.getSyscode(), OfsLog.DataType_WfData, ofsLogOperType, operResult, returnMessage ); } public void saveDataByMq(List datas, OfsTodoData data, Map custom) { ofsTodoDataManager = this; OfsSysInfoCacheDAO ofsSysInfoCacheDAO = new OfsSysInfoCacheDAO(); OfsSysInfo ofsSysInfoCache = ofsSysInfoCacheDAO.getOfsSysInfoCacheBySysCode(data.getSyscode()); if (Util.getIntValue(data.getRequestid(), 0) == 0) { log.info("是否开启雪花算法: " + isSnowflake); if (!isSnowflake) { //E9老逻辑,requestId没有使用雪花算法 int requestId = ofsTodoDataManager.buildRequestid(data); data.setRequestid(Util.null2String(requestId)); } else { //requestId使用雪花算法生成 String requestId = ofsTodoDataManager.buildRequestidForSnowflake(data); data.setRequestid(requestId); } } // 保存数据 for (OfsTodoData dataNew : datas) { dataNew.setRequestid(Util.null2String(data.getRequestid())); // 待办查待办表,做更新或者新增,同时删除已办数据(注:增加删除ofs_done_data) // 已办查已办表,做更新或者新增,同时删除待办数据(注意:ofs_log数据的关联需要修改——通过syscode、flowid、receiver关联数据) String saveResult = this.saveData(ofsSysInfoCache, dataNew); // 保存自定义字段数据 if (this.isAuto) { if (custom != null && !custom.isEmpty()) { // TODO 将原来的数据dataid查出来,修改成新的dataid this.saveOfsCustom(dataNew, custom); } } } log.error("流程数据保存成功!!"); } public void saveOfsCustom(OfsTodoData dataNew, Map custom) { boolean save = ofsCustomDataService.save(dataNew, custom); /*if(!save){ throw new RuntimeException("保存自定义字段异常"); }*/ } /** * 删除异构系统流程 */ public Map deleteRequestInfo( String syscode, String flowid ) { isAnalysis(); OfsTodoData data = new OfsTodoData(); data.setSyscode(syscode); data.setFlowid(flowid); // OfsSettingCacheNew ofsSettingCacheNew = new OfsSettingCacheNew(); // ofsSettingCacheNew.next(); // String OfsSetting_isuse = ofsSettingCacheNew.getId(); OfsSettingCacheDAO ofsSettingCacheDAO = new OfsSettingCacheDAO(); OfsSetting ofsSettingCache = ofsSettingCacheDAO.getOfsSettingCache(); String OfsSetting_isuse = ofsSettingCache.getIsuse(); if (!OfsSetting.IsUse_Yes.equals(OfsSetting_isuse)) {//关闭统一待办中心状态 return buildReceiveTodoRequest( syscode, OfsLog.DataType_IsUse, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "统一待办中心未启用" ); } String msg = ""; String result = OfsLog.OperResult_Failure; if (syscode == null || "".equals(syscode)) { msg = "" + SystemEnv.getHtmlLabelName(10003846, weaver.general.ThreadVarLanguage.getLang()) + ",syscode" + SystemEnv.getHtmlLabelName(385284, weaver.general.ThreadVarLanguage.getLang()) + ""; return buildReceiveTodoRequest( syscode, OfsLog.DataType_WfData, OfsLog.OperType_Del, result, msg ); } // OfsSysInfoCacheNew ofsSysInfoCacheNew = ofsTodoDataManager.getOfsSysInfoCache(data); OfsSysInfoCacheDAO ofsSysInfoCacheDAO = new OfsSysInfoCacheDAO(); OfsSysInfo ofsSysInfoCache = ofsSysInfoCacheDAO.getOfsSysInfoCacheBySysCode(data.getSyscode()); if (ofsSysInfoCache == null) { return buildReceiveTodoRequest( syscode, OfsLog.DataType_OtherSys, OfsLog.OperType_Del, result, "异构系统标识【" + data.getSyscode() + "】未注册" ); } //异构许可ip String OfsSysInfo_securityip = ofsSysInfoCache.getSecurityip(); // Map OfsSysInfoMap = ofsSysInfoService.getOneMap(syscode); // String OfsSysInfo_securityip = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"securityip"); if (this.isCheckIP && !checkIp(OfsSysInfo_securityip, this.clientIp)) { //检测当前IP是否在许可IP范围内 return buildReceiveTodoRequest( syscode, OfsLog.DataType_OtherSys, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "异构系统标识【" + syscode + "】当前IP(" + this.clientIp + ")未授权" ); } if (flowid == null || "".equals(flowid)) { msg = "" + SystemEnv.getHtmlLabelName(10003846, weaver.general.ThreadVarLanguage.getLang()) + ",flowid" + SystemEnv.getHtmlLabelName(385284, weaver.general.ThreadVarLanguage.getLang()) + ""; return buildReceiveTodoRequest( syscode, OfsLog.DataType_WfData, OfsLog.OperType_Del, result, msg ); } /*int tododataCnt = ofsTodoDataService.getTodoDataCnt(syscode,flowid); if(tododataCnt==0){ msg = ""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10003846,weaver.general.ThreadVarLanguage.getLang())+","+weaver.systeminfo.SystemEnv.getHtmlLabelName(10003847,weaver.general.ThreadVarLanguage.getLang())+""; }else{*/ //TODO 删除消息 Set userids = new HashSet(); RecordSet rs1 = new RecordSet(); rs1.executeQuery("select * from ofs_todo_data where syscode = ? and flowid = ?", syscode, flowid); while (rs1.next()) { String rs1String = rs1.getString("userid"); if (StringUtils.isNotBlank(rs1String)) { userids.add(rs1String); String receiver = rs1.getString("receiver"); Util_DataCache.clearVal(syscode + "_" + flowid + "_" + receiver); } } rs1.executeQuery("select * from ofs_done_data where syscode = ? and flowid = ?", syscode, flowid); while (rs1.next()) { String rs1String = rs1.getString("userid"); if (StringUtils.isNotBlank(rs1String)) { userids.add(rs1String); String receiver = rs1.getString("receiver"); Util_DataCache.clearVal(syscode + "_" + flowid + "_" + receiver); } } log.error("userids:" + userids); log.error("userids.size():" + userids.size()); if (userids.size() > 0) { 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); result = OfsLog.OperResult_Success; msg = "" + SystemEnv.getHtmlLabelName(10003848, weaver.general.ThreadVarLanguage.getLang()) + ""; ofsDoneDataService.delete(syscode, flowid); ofsCustomDataService.delete(syscode, flowid); //} /* // TODO 删除数据记录日志 if(result.equals("1")){ saveLog(data.getSysid(),OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,OfsLog.OperType_Del,OfsLog.OperResult_Success,msg, data); }else{ saveLog(data.getSysid(),OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,OfsLog.OperType_Del,OfsLog.OperResult_Failure,msg, data); }*/ return buildReceiveTodoRequest( syscode, OfsLog.DataType_WfData, OfsLog.OperType_Del, result, msg ); } /** * 删除某个用户异构系统流程 */ public Map deleteUserRequestInfo( String syscode, String flowid, String userid ) { isAnalysis(); OfsTodoData data = new OfsTodoData(); data.setSyscode(syscode); data.setFlowid(flowid); data.setReceiver(userid); // OfsSettingCacheNew ofsSettingCacheNew = new OfsSettingCacheNew(); // ofsSettingCacheNew.next(); // String OfsSetting_isuse = ofsSettingCacheNew.getId(); OfsSettingCacheDAO ofsSettingCacheDAO = new OfsSettingCacheDAO(); OfsSetting ofsSettingCache = ofsSettingCacheDAO.getOfsSettingCache(); String OfsSetting_isuse = ofsSettingCache.getIsuse(); if (!OfsSetting.IsUse_Yes.equals(OfsSetting_isuse)) {//关闭统一待办中心状态 return buildReceiveTodoRequest( syscode, OfsLog.DataType_IsUse, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "统一待办中心未启用" ); } String msg = ""; String result = OfsLog.OperResult_Failure; if (StringUtils.isBlank(syscode)) { msg = "" + SystemEnv.getHtmlLabelName(10003846, weaver.general.ThreadVarLanguage.getLang()) + ",syscode" + SystemEnv.getHtmlLabelName(385284, weaver.general.ThreadVarLanguage.getLang()) + ""; return buildReceiveTodoRequest( syscode, OfsLog.DataType_WfData, OfsLog.OperType_Del, result, msg ); } // OfsSysInfoCacheNew ofsSysInfoCacheNew = ofsTodoDataManager.getOfsSysInfoCache(data); OfsSysInfoCacheDAO ofsSysInfoCacheDAO = new OfsSysInfoCacheDAO(); OfsSysInfo ofsSysInfoCache = ofsSysInfoCacheDAO.getOfsSysInfoCacheBySysCode(data.getSyscode()); if (ofsSysInfoCache == null) { return buildReceiveTodoRequest( syscode, OfsLog.DataType_OtherSys, OfsLog.OperType_Del, result, "异构系统标识【" + data.getSyscode() + "】未注册" ); } //异构许可ip String OfsSysInfo_securityip = ofsSysInfoCache.getSecurityip(); // Map OfsSysInfoMap = ofsSysInfoService.getOneMap(syscode); // String OfsSysInfo_securityip = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"securityip"); if (this.isCheckIP && !checkIp(OfsSysInfo_securityip, this.clientIp)) { //检测当前IP是否在许可IP范围内 return buildReceiveTodoRequest( syscode, OfsLog.DataType_OtherSys, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "异构系统标识【" + syscode + "】当前IP(" + this.clientIp + ")未授权" ); } if (StringUtils.isBlank(flowid)) { msg = "" + SystemEnv.getHtmlLabelName(10003846, weaver.general.ThreadVarLanguage.getLang()) + ",flowid" + SystemEnv.getHtmlLabelName(385284, weaver.general.ThreadVarLanguage.getLang()) + ""; return buildReceiveTodoRequest( syscode, OfsLog.DataType_WfData, OfsLog.OperType_Del, result, msg ); } if (StringUtils.isBlank(userid)) { msg = "" + SystemEnv.getHtmlLabelName(10003846, weaver.general.ThreadVarLanguage.getLang()) + ",userid" + SystemEnv.getHtmlLabelName(385284, weaver.general.ThreadVarLanguage.getLang()) + ""; return buildReceiveTodoRequest( syscode, OfsLog.DataType_WfData, OfsLog.OperType_Del, result, msg ); } /*int tododataCnt = ofsTodoDataService.getTodoDataCnt(syscode,flowid,userid); if(tododataCnt==0){ msg = ""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10003846,weaver.general.ThreadVarLanguage.getLang())+","+weaver.systeminfo.SystemEnv.getHtmlLabelName(10003847,weaver.general.ThreadVarLanguage.getLang())+""; }else{*/ //TODO 删除消息 String useridReal = ofsSysInfoService.getHrmResourceIdByHrmTransRule(ofsSysInfoCache.getHrmtransrule(), userid); Set userids = new HashSet(); if (StringUtils.isNotBlank(useridReal)) { userids.add(useridReal); } else { msg = "" + SystemEnv.getHtmlLabelName(10003846, weaver.general.ThreadVarLanguage.getLang()) + ",检测接收人【 " + userid + "】不存在"; return buildReceiveTodoRequest( syscode, OfsLog.DataType_WfData, OfsLog.OperType_Del, result, msg ); } // data = ofsTodoDataService.getOne(syscode, flowid, userid); // Set userids = new HashSet(); // if(data != null){ // String dataUserid = data.getUserid(); // if(StringUtils.isNotBlank(dataUserid)){ // userids.add(dataUserid); // } // } // TODO 删除自定义字段数据 ofsCustomDataService.delete(syscode, flowid, userid); log.info("userids:" + userids); log.info("userids.size():" + userids.size()); if (userids.size() > 0) { 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, useridReal); result = OfsLog.OperResult_Success; msg = "" + SystemEnv.getHtmlLabelName(10003848, weaver.general.ThreadVarLanguage.getLang()) + ""; ofsDoneDataService.delete(syscode, flowid, useridReal); //} Util_DataCache.clearVal(syscode + "_" + flowid + "_" + useridReal); // TODO 删除数据记录日志 /*if(result.equals("1")){ saveLog(data.getSysid(),OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,OfsLog.OperType_Del,OfsLog.OperResult_Success,msg, data); }else{ saveLog(data.getSysid(),OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID,OfsLog.OperType_Del,OfsLog.OperResult_Failure,msg, data); }*/ return buildReceiveTodoRequest( syscode, OfsLog.DataType_WfData, OfsLog.OperType_Del, result, msg ); } /** * 处理待办流程(变为已办map格式) */ public Map processDoneRequestByMap(Map dataMap) { // 业务数据 dataMap.put("isremark", OfsTodoData.IsRemark_Done); dataMap.put("viewtype", OfsTodoData.ViewType_Over); //TODO 如果已经解析完成不用再次解析 Object custom = dataMap.get("custom"); if (custom instanceof Map) { } else { String str = (String) dataMap.get("custom"); Map map = xmlToMap(str); dataMap.put("custom", map); } return this.receiveRequestInfo(dataMap, "done"); } /** * 处理待办流程(变为已办json格式) */ public String processDoneRequestByJson(String json) { Map dataMap = this.jsonToMap(json); Map resultMap = this.processDoneRequestByMap(dataMap); return OfsUtils.mapToJson(resultMap); } /** * 处理待办流程(变为已办xml格式) */ public String processDoneRequestByXml(String xml) { Map dataMap = this.xmlToMap(xml); Map resultMap = this.processDoneRequestByMap(dataMap); return OfsUtils.mapToXml(resultMap, RESULT_XML_ROOT); } /** * 处理已办流程(变为办结map格式) */ public Map processOverRequestByMap(Map dataMap) { // 业务数据 dataMap.put("isremark", OfsTodoData.IsRemark_Over); dataMap.put("viewtype", OfsTodoData.ViewType_Over); //TODO 如果已经解析完成不用再次解析 Object custom = dataMap.get("custom"); if (custom instanceof Map) { } else { String str = (String) dataMap.get("custom"); Map map = xmlToMap(str); dataMap.put("custom", map); } return this.receiveRequestInfo(dataMap, "over"); } /** * 处理办结流程(变为办结json格式) */ public String processOverRequestByJson(String json) { Map dataMap = this.jsonToMap(json); Map resultMap = this.processOverRequestByMap(dataMap); return OfsUtils.mapToJson(resultMap); } /** * 处理办结流程(变为办结xml格式) */ public String processOverRequestByXml(String xml) { Map dataMap = this.xmlToMap(xml); Map resultMap = this.processOverRequestByMap(dataMap); return OfsUtils.mapToXml(resultMap, RESULT_XML_ROOT); } /** * ip检测 * securityip为空,表示任何地址者可以访问; * securityip不为空,则检查clientIp是否在securityip中指定了; * * @param securityip 指定的ip范围 * 当前访问ip * 是否在ip范围内 */ public boolean checkIp(String securityip, String clientIp) { //return ("," + securityip + ",").indexOf("," + clientIp + ",") > -1; log.info("securityip:" + securityip); log.info("clientIp:" + clientIp); String[] validIPs = securityip.split(","); Boolean checkIp = CheckIP.checkIPs(validIPs, clientIp); log.info("checkIp:" + checkIp); return checkIp; } public String getEntranceUrl(String entranceurl, String OfsTodoData_id) { String url = ""; String param = "tododataid=" + OfsTodoData_id; if (!"".equals(entranceurl)) { if (entranceurl.contains("?")) { url = entranceurl + "&" + param; } else { url = entranceurl + "?" + param; } } return url; } private BatchReceiveRequestBean addOfsTodoDataList(BatchReceiveRequestBean bean, Map dataMap) { OfsTodoData ofsTodoData = ofsTodoDataManager.packageData(dataMap); bean.getOfsTodoDataList().add(ofsTodoData); // 如果没有requestId /*if (bean.getRequestId() == 0){ //校验数据完整生成 requestId Map validate = ofsTodoDataManager.validate(ofsTodoData,"info"); if (validate == null){ bean.setRequestId(ofsTodoDataManager.buildRequestid(ofsTodoData)); } }*/ return bean; } private BatchReceiveRequestBean getBatchReceiveRequestBean(Map dataMap) { BatchReceiveRequestBean bean = new BatchReceiveRequestBean(); List list = new ArrayList<>(); OfsTodoData ofsTodoData = ofsTodoDataManager.packageData(dataMap); list.add(ofsTodoData); bean.setOfsTodoDataList(list); //校验数据完整生成 requestId /*Map validate = ofsTodoDataManager.validate(ofsTodoData,"info"); if (validate == null){ bean.setRequestId(ofsTodoDataManager.buildRequestid(ofsTodoData)); }*/ return bean; } /** * 根据syscode和flowid区分出不同的json_arr批量处理数据 * #599419 * 概述:优化了【统一待办中心集成】批量提交接口的功能 */ public String batchReceiveRequestInfoByJson(String json) { isAnalysis(); Map requestMap = new HashMap(); List> list = new ArrayList>(); JSONArray arr = JSONArray.fromObject(json); if (arr != null) { for (int i = 0; i < arr.size(); i++) { Map dataMap = jsonToMap(arr.getJSONObject(i).toString()); /*String syscode = Util.null2String((String)dataMap.get("syscode")); String flowId = Util.null2String((String)dataMap.get("flowid")); StringBuffer mapKey = new StringBuffer() ; mapKey.append(syscode).append("_").append(flowId) ; BatchReceiveRequestBean batchReceiveRequestBean = requestMap.get(mapKey.toString()) ; if (batchReceiveRequestBean != null && batchReceiveRequestBean.validate() ){ this.addOfsTodoDataList(batchReceiveRequestBean , dataMap) ; }else { requestMap.put(mapKey.toString() , this.getBatchReceiveRequestBean(dataMap)) ; }*/ /*Map dataMap = jsonToMap(arr.getJSONObject(i).toString()); Map result = this.receiveRequestInfo(dataMap,"info");//获取要存储数据库的数据 list.add(result); String syscode = Util.null2String((String)dataMap.get("syscode")); String flowid = Util.null2String((String)dataMap.get("flowid")); String isremark = Util.null2String((String)dataMap.get("isremark")); ofsTodoDataManager.batchProcessOverRequstComplet(syscode, flowid, isremark);//批量处理办结情况*/ Map result = this.receiveRequestInfo(dataMap, "info");//获取要存储数据库的数据 list.add(result); } } /*for (String key : requestMap.keySet()){ BatchReceiveRequestBean bean = requestMap.get(key) ; if (bean != null){ for (int i = 0 ; i< bean.getOfsTodoDataList().size() ; i++){ Map result = this.receiveRequestInfo(bean.getOfsTodoData(i),"info");//获取要存储数据库的数据 list.add(result); } } }*/ return JSON.toJSONString(list); } public void batchProcessOverRequstComplet(String syscode, String flowid, String 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); } } /** * 批量删除流程 */ public String batchDeleteUserRequestInfoByJson(String json) { List> list = new ArrayList>(); JSONArray json_arr = JSONArray.fromObject(json); if (json_arr != null) { for (int i = 0; i < json_arr.size(); i++) { Map dataMap = jsonToMap(json_arr.getJSONObject(i).toString()); //批量删除,返回每一个删除结果 Map map = this.deleteUserRequestInfoByMap(dataMap); list.add(map); } } return JSON.toJSONString(list); } //TODO 抄送 /** * 接收抄送流程(json格式) */ public String receiveCCRequestByJson(String json) { Map dataMap = this.jsonToMap(json); Map resultMap = this.receiveCCRequestByMap(dataMap); String resultJson = OfsUtils.mapToJson(resultMap); return resultJson; } /** * 接收抄送流程(xml格式) */ public String receiveCCRequestByXml(String xml) { Map dataMap = this.xmlToMap(xml); Map resultMap = this.receiveCCRequestByMap(dataMap); String toXml = OfsUtils.mapToXml(resultMap, RESULT_XML_ROOT); return toXml; } /** * 接收抄送流程 */ public Map receiveCCRequestByMap(Map dataMap) { // 业务数据 dataMap.put("isremark", "8"); dataMap.put("viewtype", OfsTodoData.ViewType_None); //TODO 如果已经解析完成不用再次解析 Object custom = dataMap.get("custom"); if (custom instanceof Map) { } else { String str = (String) dataMap.get("custom"); Map map = xmlToMap(str); dataMap.put("custom", map); } return this.receiveRequestInfo(dataMap, "cc"); } //TODO 已读 /** * 接收抄送流程(json格式) */ public String receiveReadRequestByJson(String json) { Map dataMap = this.jsonToMap(json); Map resultMap = this.receiveReadRequestByMap(dataMap); String resultJson = OfsUtils.mapToJson(resultMap); return resultJson; } /** * 接收抄送流程(xml格式) */ public String receiveReadRequestByXml(String xml) { Map dataMap = this.xmlToMap(xml); Map resultMap = this.receiveReadRequestByMap(dataMap); String toXml = OfsUtils.mapToXml(resultMap, RESULT_XML_ROOT); return toXml; } /** * 接收抄送流程 */ public Map receiveReadRequestByMap(Map dataMap) { // 业务数据 String isremark = Util.null2String((String) dataMap.get("isremark")); /*if(StringUtils.isBlank(isremark)){ dataMap.put("isremark","8"); }*/ dataMap.put("viewtype", "1"); //TODO 如果已经解析完成不用再次解析 Object custom = dataMap.get("custom"); if (custom instanceof Map) { } else { String str = (String) dataMap.get("custom"); Map map = xmlToMap(str); dataMap.put("custom", map); } return this.receiveRequestInfo(dataMap, "read"); } public OfsTodoData packageData(Map dataMap) { String syscode = Util.null2String((String) dataMap.get("syscode")); String flowid = Util.null2String((String) dataMap.get("flowid")); String requestname = Util.null2String((String) dataMap.get("requestname")); String workflowname = Util.null2String((String) dataMap.get("workflowname")); String nodename = Util.null2String((String) dataMap.get("nodename")); String pcurl = Util.null2String((String) dataMap.get("pcurl")); String appurl = Util.null2String((String) dataMap.get("appurl")); String isremark = Util.null2String((String) dataMap.get("isremark")); String viewtype = Util.null2String((String) dataMap.get("viewtype")); String createdatetime = Util.null2String((String) dataMap.get("createdatetime")); String creator = Util.null2String((String) dataMap.get("creator")); String receiver = Util.null2String((String) dataMap.get("receiver")); String receivedatetime = Util.null2String((String) dataMap.get("receivedatetime")); String receivets = Util.null2String((String) dataMap.get("receivets")); String requestlevel = Util.null2String((String) dataMap.get("requestlevel")); //String isauto = Util.null2String((String)dataMap.get("isauto")); if (StringUtils.isBlank(receivets)) { receivets = String.valueOf(System.currentTimeMillis()); } String createtime = ""; String receivetime = ""; String createdate = ""; String receivedate = ""; if (StringUtils.isNotBlank(createdatetime) && createdatetime.length() == 19) { createdate = createdatetime.substring(0, 10); createtime = createdatetime.length() > 11 ? createdatetime.substring(11) : createtime; } else { createdate = createdatetime; } if (StringUtils.isNotBlank(receivedatetime) && receivedatetime.length() == 19) { receivedate = receivedatetime.substring(0, 10); receivetime = receivedatetime.length() > 11 ? receivedatetime.substring(11) : receivetime; } else { receivedate = receivedatetime; } /*if(StringUtils.isBlank(requestname)){ requestname = ofsRequestBaseService.getRequestname(syscode,flowid); }*/ // 获取自定义字段的数据 Map custom = (Map) dataMap.get("custom"); OfsTodoData data = new OfsTodoData(); data.setSyscode(syscode); data.setFlowid(flowid); data.setRequestname(requestname); data.setWorkflowname(workflowname); data.setNodename(nodename); data.setPcurl(pcurl); data.setAppurl(appurl); data.setIsremark(isremark); data.setViewtype(viewtype); data.setCreator(creator); data.setReceiver(receiver); data.setCreatedate(createdate); data.setCreatetime(createtime); data.setReceivedate(receivedate); data.setReceivetime(receivetime); data.setReceivets(receivets); data.setRequestlevel(requestlevel); //data.setIsauto(isauto); data.setCustom(custom); return data; } // TODO receiver 接收多个人,返回那些人不存在 public Map validateReceiver(OfsSysInfo ofsSysInfoCache, OfsTodoData data) { List list = new ArrayList<>(); String requestname = data.getRequestname(); String receiver = data.getReceiver(); String[] split = receiver.split(","); //人员转换规则 String OfsSysInfo_HrmTransRule = ofsSysInfoCache.getHrmtransrule(); // 存在的接收人 String exist = ""; // 不存在的接收人 String noexist = ""; for (String rece : split) { String userid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule, rece); if (Util.null2String(userid).equals("0") || StringUtils.isEmpty(userid)) { //保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人不存在 noexist += "," + rece; data.setReceiver(rece); data.setUserid("0"); ofsTodoDataManager.saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + data.getId(), OfsLog.OperType_Check, OfsLog.OperResult_Failure, "流程数据【" + requestname + "】检测接收人【" + rece + "】不存在", data); } else { exist += "," + rece; // 克隆一个对象,修改接收人userid和receiver OfsTodoData obj = JSON.parseObject(JSON.toJSONString(data), OfsTodoData.class); obj.setUserid(userid); obj.setReceiver(rece); list.add(obj); } } if (exist.length() > 0) { exist = exist.substring(1); } if (noexist.length() > 0) { noexist = noexist.substring(1); } Map map = new HashMap(); map.put("datas", list); map.put("exist", exist); map.put("noexist", noexist); return map; } @Override public Map validate(OfsSysInfoCacheNew ofsSysInfoCacheNew, OfsTodoData data, String method) { return null; } public Map validate(OfsTodoData data, String method) { String receivets = data.getReceivets(); String receiver = data.getReceiver(); String requestname = data.getRequestname(); String creator = data.getCreator(); String syscode = data.getSyscode(); String flowid = data.getFlowid(); String isremark = data.getIsremark(); String viewtype = data.getViewtype(); String workflowname = data.getWorkflowname(); String requestlevel = data.getRequestlevel(); // OfsSettingCacheNew ofsSettingCacheNew = new OfsSettingCacheNew(); // ofsSettingCacheNew.next(); // String OfsSetting_isuse = ofsSettingCacheNew.getId(); OfsSettingCacheDAO ofsSettingCacheDAO = new OfsSettingCacheDAO(); OfsSetting ofsSettingCache = ofsSettingCacheDAO.getOfsSettingCache(); String OfsSetting_isuse = ofsSettingCache.getIsuse(); if (!OfsSetting.IsUse_Yes.equals(OfsSetting_isuse)) {//关闭统一待办中心状态 Map OfsSettingMap = ofsSettingService.getOneMap(); OfsSetting_isuse = OfsUtils.getStringValueByMapKey(OfsSettingMap, "isuse", OfsSetting.IsUse_No);//是否启用统一待办中心状态 if (!OfsSetting.IsUse_Yes.equals(OfsSetting_isuse)) return saveLog("0", OfsLog.DataType_IsUse + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "统一待办中心未启用", data); } /*int syscodeCnt = this.ofsSysInfoService.getCnt(syscode);//获取指定异构系统标识的数量 if(syscodeCnt == 0){//记录系统日志:异构系统-检测-失败-异构系统标识【XXXX】未注册 return saveLog(data.getSysid(),OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID,OfsLog.OperType_Check,OfsLog.OperResult_Failure,"异构系统标识【"+syscode+"】未注册", data); }*/ // OfsSysInfoCacheNew ofsSysInfoCacheNew = ofsTodoDataManager.getOfsSysInfoCache(data); OfsSysInfoCacheDAO ofsSysInfoCacheDAO = new OfsSysInfoCacheDAO(); OfsSysInfo ofsSysInfoCache = ofsSysInfoCacheDAO.getOfsSysInfoCacheBySysCode(syscode); String OfsSysInfo_HrmTransRule; String OfsSysInfo_securityip; int OfsSysInfo_receivewfdata; int OfsSysInfo_autocreatewftype; int OfsSysInfo_sysid; if (ofsSysInfoCache == null) { int syscodeCnt = ofsSysInfoService.getCnt(syscode);//获取指定异构系统标识的数量 if (syscodeCnt == 0) {//记录系统日志:异构系统-检测-失败-异构系统标识【XXXX】未注册 return saveLog("0", OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "异构系统标识【" + data.getSyscode() + "】未注册", data); } else { Map OfsSysInfoMap = ofsSysInfoService.getOneMap(syscode); OfsSysInfo_sysid = OfsUtils.getIntValueByMapKey(OfsSysInfoMap, "sysid", OfsSysInfo.Default_SysId);//异构系统id data.setSysid(OfsSysInfo_sysid + ""); OfsSysInfo_HrmTransRule = OfsUtils.getStringValueByMapKey(OfsSysInfoMap, "hrmtransrule");//人员转换规则 OfsSysInfo_securityip = OfsUtils.getStringValueByMapKey(OfsSysInfoMap, "securityip");//异构许可ip OfsSysInfo_receivewfdata = OfsUtils.getIntValueByMapKey(OfsSysInfoMap, "receivewfdata", OfsSysInfo.ReceiveWfData_No);//异构系统允许接收流程数据 OfsSysInfo_autocreatewftype = OfsUtils.getIntValueByMapKey(OfsSysInfoMap, "autocreatewftype", OfsSysInfo.AutoCreateWfType_No);//异构系统自动创建流程类型 } } else { //异构系统id OfsSysInfo_sysid = Util.getIntValue(ofsSysInfoCache.getSysid(), 0); if (OfsSysInfo_sysid == 0) { OfsSysInfo_sysid = Util.getIntValue(ofsSysInfoService.getOneBean(data.getSyscode()).getSysid()); } data.setSysid(OfsSysInfo_sysid + ""); //人员转换规则 OfsSysInfo_HrmTransRule = ofsSysInfoCache.getHrmtransrule(); //异构许可ip OfsSysInfo_securityip = ofsSysInfoCache.getSecurityip(); //异构系统允许接收流程数据 OfsSysInfo_receivewfdata = Util.getIntValue(ofsSysInfoCache.getReceivewfdata(), OfsSysInfo.ReceiveWfData_No); OfsSysInfo_autocreatewftype = Util.getIntValue(ofsSysInfoCache.getAutocreatewftype(), OfsSysInfo.AutoCreateWfType_No); } //校验时间戳 Pattern pattern = Pattern.compile("[0-9]*"); boolean matchesReceivets = pattern.matcher(receivets).matches(); if (matchesReceivets) { } else { return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "时间戳不合法,当前时间戳为:" + receivets, data); } //校验紧急程度字段 boolean matchesRequestlevel = pattern.matcher(requestlevel).matches(); if (matchesRequestlevel) { } else { return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "紧急程度数据不合法,当前值为:" + requestlevel, data); } //保存失败,记录系统日志:流程数据-检测-失败-流程数据【"+requestname+"】检测接收人为空 if (StringUtils.isBlank(receiver)) { return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "流程数据【" + requestname + "】检测接收人为空", data); } if ("read".equals(method)) { } else { if (("0".equals(isremark) || "8".equals(isremark) || StringUtils.isNotBlank(data.getCreatedate() + " " + data.getCreatetime())) && !checkDateTime(data.getCreatedate() + " " + data.getCreatetime())) { return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "创建日期不合法,合法格式:yyyy-mm-dd hh:MM:ss", data); } if (("0".equals(isremark) || "8".equals(isremark) || StringUtils.isNotBlank(data.getReceivedate() + " " + data.getReceivetime())) && !checkDateTime(data.getReceivedate() + " " + data.getReceivetime())) {//校验接收日期格式 return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "接收日期不合法,合法格式:yyyy-mm-dd hh:MM:ss", data); } } if (StringUtils.isBlank(flowid)) {//流程id不能为空 return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "flowid不能为空", data); } if (method.equals("read") || method.equals("todo") || method.equals("done") || method.equals("over") || method.equals("cc")) { } else { //检测isremark不合法 if (!isremark.equals(OfsTodoData.IsRemark_Todo) && !isremark.equals(OfsTodoData.IsRemark_Done) && !isremark.equals(OfsTodoData.IsRemark_Over) && !isremark.equals("8")) { return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "流程数据【" + requestname + "】检测isremark不合法(0:待办|2:已办|4:办结|8:抄送)", data); } //检查viewtype值是否合法 if (!viewtype.equals(OfsTodoData.ViewType_None) && !viewtype.equals(OfsTodoData.ViewType_Over)) { return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "流程数据【" + requestname + "】检测viewtype不合法(0:未读|1:已读)", data); } } if (StringUtils.isBlank(workflowname)) {//记录系统日志:流程类型-检测-失败-流程类型未填写 return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "流程类型未填写", data); } if (StringUtils.isBlank(requestname)) {//保存失败,记录系统日志:流程数据-检测-失败-流程标题未填写 return saveLog(data.getSysid(), OfsLog.DataType_WfData + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "流程标题未填写", data); } //创建人不校验给默认值 String creatorid = ofsSysInfoService.getHrmResourceIdByHrmTransRule(OfsSysInfo_HrmTransRule, creator); if (StringUtils.isNotBlank(creator)) { data.setCreatorid(creatorid); } // Map OfsSysInfoMap = ofsSysInfoService.getOneMap(syscode); // OfsSysInfo_securityip = OfsUtils.getStringValueByMapKey(OfsSysInfoMap,"securityip"); if (this.isCheckIP && !checkIp(OfsSysInfo_securityip, this.clientIp)) { //检测当前IP是否在许可IP范围内 return saveLog(data.getSysid(), OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "异构系统标识【" + syscode + "】当前IP(" + this.clientIp + ")未授权", data); } if (OfsSysInfo_receivewfdata == 0) { return saveLog(data.getSysid(), OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "异构系统标识【" + syscode + "】不允许接收流程数据", data); } //是否新流程类型:1旧,0新 int workflownameCnt = ofsWorkflowService.getCnt(OfsSysInfo_sysid, workflowname); //异构系统自动创建流程类型 //int OfsSysInfo_autocreatewftype = Util.getIntValue(ofsSysInfoCacheNew.getAutocreatewftype(),OfsSysInfo.AutoCreateWfType_No); if (OfsSysInfo_autocreatewftype == 0 && workflownameCnt == 0) {//异构系统的【自动创建流程类型】关闭 并且 流程类型不存在 return saveLog(data.getSysid(), OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "异构系统标识【" + syscode + "】不允许创建流程类型", data); } //TODO 异构系统的【自动创建流程类型】开启 并且 流程类型不存在,自动新增流程类型 //TODO 根据异构系统id和流程类型名称获取异构系统流程类型信息 Map result = saveWorkflowtype(OfsSysInfo_autocreatewftype, workflownameCnt, OfsSysInfo_sysid, OfsSysInfo_receivewfdata, workflowname, flowid); if (StringUtils.isNotBlank(result.get("msg"))) { data.setUserid("1"); if ("false".equals(result.get("flag"))) { saveLog(data.getSysid(), OfsLog.DataType_WfType + LINK_CHAR + data.getId(), result.get("type"), OfsLog.OperResult_Failure, result.get("msg"), data); } else { saveLog(data.getSysid(), OfsLog.DataType_WfType + LINK_CHAR + data.getId(), result.get("type"), OfsLog.OperResult_Success, result.get("msg"), data); } data.setUserid(""); } //根据异构系统id和流程类型名称获取异构系统流程类型信息 // Map 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);//接收流程数据 int OfsWorkflow_workflowid = OfsWorkflow.Default_WorkflowId;//获取异构系统流程类型id int OfsWorkflow_receivewfdata = OfsWorkflow.ReceiveWfData_No;//接收流程数据 //根据异构系统id和流程类型名称获取异构系统流程类型信息 OfsWorkflowCacheDAO ofsWorkflowCacheDAO = new OfsWorkflowCacheDAO(); OfsWorkflow ofsWorkflowCache = ofsWorkflowCacheDAO.getOfsWorkflowCache(String.valueOf(OfsSysInfo_sysid), workflowname); if (!Objects.isNull(ofsWorkflowCache)) { if (StringUtils.isNotBlank(ofsWorkflowCache.getWorkflowid())) { OfsWorkflow_workflowid = Integer.parseInt(ofsWorkflowCache.getWorkflowid()); } if (StringUtils.isNotBlank(ofsWorkflowCache.getReceivewfdata())) { OfsWorkflow_receivewfdata = Integer.parseInt(ofsWorkflowCache.getReceivewfdata()); } } if ("true".equals(result.get("flag"))) { defaultSelect(syscode, OfsWorkflow_workflowid + ""); } if (OfsWorkflow_receivewfdata == 0) { return saveLog(data.getSysid(), OfsLog.DataType_OtherSys + LINK_CHAR + DEFAULT_DATA_ID, OfsLog.OperType_Check, OfsLog.OperResult_Failure, "流程类型【" + workflowname + "】不允许接收流程数据", data); } // 校验通过 data.setWorkflowid(OfsWorkflow_workflowid + ""); //data.setFlowguid(data.getSyscode() + LINK_CHAR + OfsWorkflow_workflowid + LINK_CHAR + data.getFlowid() + LINK_CHAR + data.getReceiver()); //data.setId(ofsTodoDataService.getTodoDataId(syscode,flowid,receiver)+""); //1 校验自定义字段 //2 先校验ofs_todo_data表数据,再校验自定义字段的数据(是否启用,是否必填) //3 先保存ofs_todo_data表数据,保存成功之后保存自定义字段的数据 return null; } public Map saveWorkflowtype(int OfsSysInfo_autocreatewftype, int workflownameCnt, int OfsSysInfo_sysid, int OfsSysInfo_receivewfdata, String workflowname, String flowid) { String msg = ""; String flag = "false"; String type = ""; if (OfsSysInfo_autocreatewftype == 1 && workflownameCnt == 0) {//异构系统的【自动创建流程类型】开启 并且 流程类型不存在 //流程类型不存在 //相同flowid历史数据中的流程类型是否存在 //List> 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) {//记录系统日志:流程类型-自动创建-成功 //自动创建流程成功后要重新获取流程类型数据 msg = "" + SystemEnv.getHtmlLabelName(10003859, weaver.general.ThreadVarLanguage.getLang()) + "" + workflowname + "】" + SystemEnv.getHtmlLabelName(10003860, weaver.general.ThreadVarLanguage.getLang()) + ""; flag = "true"; type = OfsLog.OperType_AutoNew; } else {//记录系统日志:流程类型-自动创建-失败-流程类型【XXXX】保存失败 msg = "" + SystemEnv.getHtmlLabelName(10003859, weaver.general.ThreadVarLanguage.getLang()) + "" + workflowname + "】" + SystemEnv.getHtmlLabelName(10003861, weaver.general.ThreadVarLanguage.getLang()) + ""; flag = "false"; type = OfsLog.OperType_AutoNew; } //}else{//存在,自动更新 //更新流程类型; // boolean ofswftypeUpdateFlag = ofsWorkflowService.updateWorkflowName(OfsSysInfo_sysid+"",workflowname,SYSADMIN_ID,historyOfsWfTypeExistList); // if(ofswftypeUpdateFlag){//记录系统日志:流程类型-自动创建-成功 //自动创建流程成功后要重新获取流程类型数据 // msg = ""+ SystemEnv.getHtmlLabelName(10003859,weaver.general.ThreadVarLanguage.getLang())+""+workflowname+"】"+ SystemEnv.getHtmlLabelName(10003862,weaver.general.ThreadVarLanguage.getLang())+""; // flag = "true"; // type = OfsLog.OperType_AutoEdit; // }else{//记录系统日志:流程类型-自动创建-失败-流程类型【XXXX】保存失败 // msg = ""+ SystemEnv.getHtmlLabelName(10003859,weaver.general.ThreadVarLanguage.getLang())+""+workflowname+"】"+ SystemEnv.getHtmlLabelName(10003863,weaver.general.ThreadVarLanguage.getLang())+""; // flag = "false"; // type = OfsLog.OperType_AutoEdit; // } //} // Map map = ofsWorkflowService.getOneMap(OfsSysInfo_sysid, workflowname); // OfsWorkflowCacheNew ofsWorkflowCacheNew = new OfsWorkflowCacheNew(); // ofsWorkflowCacheNew.addCacheByKey(map.get("workflowid")); OfsWorkflowCacheDAO ofsWorkflowCacheDAO = new OfsWorkflowCacheDAO(); ofsWorkflowCacheDAO.addOfsWorkflowCache(String.valueOf(OfsSysInfo_sysid), workflowname); } Map result = new HashMap(); result.put("msg", msg); result.put("flag", flag); result.put("type", type); return result; } private OfsTodoDataUtils ofsTodoDataUtils = new OfsTodoDataUtils(); public void sendMessage(OfsSysInfo ofsSysInfoCache, String sysname, OfsTodoData data) { //String OfsSysInfo_pcprefixurl = ofsSysInfoCacheNew.getPcprefixurl();//PC地址前缀 //String OfsSysInfo_appprefixurl = ofsSysInfoCacheNew.getAppprefixurl();//APP地址前缀 // OfsSettingCacheNew ofsSettingCacheNew = new OfsSettingCacheNew(); // ofsSettingCacheNew.next(); OfsSettingCacheDAO ofsSettingCacheDAO = new OfsSettingCacheDAO(); OfsSetting ofsSettingCache = ofsSettingCacheDAO.getOfsSettingCache(); String pcurl = data.getPcurl(); String appurl = data.getAppurl(); //待办才发送消息提醒 /* String remindPcUrl = (OfsSysInfo_pcprefixurl+""+pcurl); String remindAppUrl = (OfsSysInfo_appprefixurl+""+appurl); //TODO 如果有中转页面,推送给消息中心的是中转页面地址 //String sqlStr = "select * from SystemSet"; //rsrtx.executeSql(sqlStr); //rsrtx.next(); //String oaaddress = rsrtx.getString("oaaddress"); String appentranceurl = ofsSysInfoCacheNew.getAppentranceurl(); if(StringUtils.isNotBlank(appentranceurl)){ remindAppUrl = appurl; } String pcentranceurl = ofsSysInfoCacheNew.getPcentranceurl(); if(StringUtils.isNotBlank(pcentranceurl)){ remindPcUrl = pcurl; } if(pcurl.startsWith("http") || pcurl.startsWith("https")){ remindPcUrl = pcurl; } if(appurl.startsWith("http") || appurl.startsWith("https")){ remindAppUrl = appurl; }*/ String remindPcUrl = this.ofsTodoDataUtils.getTodoURL(data, "pc") + "&_weaverofsmsg=1&_ec_ismobile=true"; String remindAppUrl = this.ofsTodoDataUtils.getTodoURL(data, "app") + "&_weaverofsmsg=1&_ec_ismobile=true"; 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....===================="); RemindMessage msg = new RemindMessage(); data.setPcurl(remindPcUrl); data.setAppurl(remindAppUrl); // msg.setOfsSettingCacheNew(ofsSettingCacheNew); // msg.setOfsSysInfoCacheNew(ofsSysInfoCacheNew); msg.setOfsSetting(ofsSettingCache); msg.setOfsSysInfo(ofsSysInfoCache); msg.setData(data); msg.setSysname(ofsSysInfoCache.getSysshortname()); String syscode = ofsSysInfoCache.getSyscode(); RecordSet rsrtx = new RecordSet(); rsrtx.executeQuery("select * from Ofs_sysinfo_remind where syscode = ?", syscode); int isuse = 0; int ismsgcenter = 0; int isim = 0; int isshortmsg = 0; int iscustom = 0; String customclass = ""; String channel = ""; if (rsrtx.next()) { isuse = rsrtx.getInt("isuse"); ismsgcenter = rsrtx.getInt("ismsgcenter"); isim = rsrtx.getInt("isim"); isshortmsg = rsrtx.getInt("isshortmsg"); iscustom = rsrtx.getInt("iscustom"); customclass = rsrtx.getString("customclass"); channel = rsrtx.getString("channel"); if (isuse == 1) { msg.setIsuse(isuse); if (ismsgcenter == 1) { msg.setChannel(channel); ofsTodoDataManager.sendMsgCenter(msg, ismsgcenter); } if (isim == 1) { OfsRemindOtherManagerNew ofsRemindOtherManagerNew = new OfsRemindOtherManagerNew(); ofsRemindOtherManagerNew.sendMsg(msg); OfsRemindRTXManagerNew ofsRemindRTXManagerNew = new OfsRemindRTXManagerNew(); ofsRemindRTXManagerNew.sendMsg(msg); OfsRemindElinkManagerNew ofsRemindElinkManagerNew = new OfsRemindElinkManagerNew(); ofsRemindElinkManagerNew.sendMsg(msg); } if (isshortmsg == 1) { OfsRemindShortMessage ofsRemindShortMessag = new OfsRemindShortMessage(); ofsRemindShortMessag.sendMsg(msg); } if (iscustom == 1) { String className = customclass; try { Class clazz = Class.forName(className); OfsRemind o = (OfsRemind) clazz.newInstance(); o.sendMsg(msg); } catch (Exception e) { log.info("调用自定义接口异常", e); } } } else { //todo 用消息中心了 ofsTodoDataManager.sendMsgCenter(msg, 0); //提醒到IM String OfsParam_remindim = Util.null2String(ofsSettingCache.getRemindim(), OfsSetting.RemindIM_No); if (isusedtx.equals("1") && OfsSetting.RemindIM_Yes.equals(OfsParam_remindim)) {//开启提醒到IM OfsRemindOtherManagerNew ofsRemindOtherManagerNew = new OfsRemindOtherManagerNew(); ofsRemindOtherManagerNew.sendMsg(msg); OfsRemindRTXManagerNew ofsRemindRTXManagerNew = new OfsRemindRTXManagerNew(); ofsRemindRTXManagerNew.sendMsg(msg); OfsRemindElinkManagerNew ofsRemindElinkManagerNew = new OfsRemindElinkManagerNew(); ofsRemindElinkManagerNew.sendMsg(msg); } // 推送到自定义消息接口 String customreminders = ofsSettingCache.getCustomreminders(); if ("1".equals(customreminders)) { String className = ofsSettingCache.getCustomreminderclass(); try { Class clazz = Class.forName(className); OfsRemind o = (OfsRemind) clazz.newInstance(); o.sendMsg(msg); } catch (Exception e) { log.info("调用自定义接口异常", e); } } // 推送短信 String remindshortmessage = ofsSettingCache.getRemindshortmessage(); if ("1".equals(remindshortmessage)) { OfsRemindShortMessage ofsRemindShortMessag = new OfsRemindShortMessage(); ofsRemindShortMessag.sendMsg(msg); } } } else { //todo 用消息中心了 ofsTodoDataManager.sendMsgCenter(msg, 0); //提醒到IM String OfsParam_remindim = Util.null2String(ofsSettingCache.getRemindim(), OfsSetting.RemindIM_No); if (isusedtx.equals("1") && OfsSetting.RemindIM_Yes.equals(OfsParam_remindim)) {//开启提醒到IM OfsRemindOtherManagerNew ofsRemindOtherManagerNew = new OfsRemindOtherManagerNew(); ofsRemindOtherManagerNew.sendMsg(msg); OfsRemindRTXManagerNew ofsRemindRTXManagerNew = new OfsRemindRTXManagerNew(); ofsRemindRTXManagerNew.sendMsg(msg); OfsRemindElinkManagerNew ofsRemindElinkManagerNew = new OfsRemindElinkManagerNew(); ofsRemindElinkManagerNew.sendMsg(msg); } // 推送到自定义消息接口 String customreminders = ofsSettingCache.getCustomreminders(); if ("1".equals(customreminders)) { String className = ofsSettingCache.getCustomreminderclass(); try { Class clazz = Class.forName(className); OfsRemind o = (OfsRemind) clazz.newInstance(); o.sendMsg(msg); } catch (Exception e) { log.info("调用自定义接口异常", e); } } // 推送短信 String remindshortmessage = ofsSettingCache.getRemindshortmessage(); if ("1".equals(remindshortmessage)) { OfsRemindShortMessage ofsRemindShortMessag = new OfsRemindShortMessage(); ofsRemindShortMessag.sendMsg(msg); } } data.setPcurl(pcurl); data.setAppurl(appurl); } public String buildIsRemarkName(OfsTodoData data) { String isremark = data.getIsremark(); String viewtype = data.getViewtype(); String isRemarkName = ""; if (StringUtils.isBlank(isremark) && viewtype.equals("1")) { isRemarkName = "" + SystemEnv.getHtmlLabelName(25425, weaver.general.ThreadVarLanguage.getLang()) + ""; } else 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; } public String buildIsRemarkName2(OfsTodoData data, String method) { String isremark = data.getIsremark(); String viewtype = data.getViewtype(); String isRemarkName = ""; if ("read".equals(method)) { isRemarkName = "" + SystemEnv.getHtmlLabelName(25425, weaver.general.ThreadVarLanguage.getLang()) + ""; } else if (StringUtils.isBlank(isremark) && viewtype.equals("1")) { isRemarkName = "" + SystemEnv.getHtmlLabelName(25425, weaver.general.ThreadVarLanguage.getLang()) + ""; } else 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; } public boolean checkDateTime(String datetime) { return Pattern.compile("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}(:\\d{2})?$").matcher(datetime).matches(); } public String buildPcUrl(String pcentranceurl, String OfsTodoDataId, String pcurl) { if (!"".equals(pcentranceurl)) { return getEntranceUrl(pcentranceurl, OfsTodoDataId); } return pcurl; } public String buildAppUrl(String pcentranceurl, String OfsTodoDataId, String appurl) { if (!"".equals(pcentranceurl)) { return getEntranceUrl(pcentranceurl, OfsTodoDataId); } return appurl; } public void updatePcurlAndAppurl(OfsSysInfoCacheNew ofsSysInfoCacheNew, OfsTodoData data) { //单点登录地址 String pcentranceurl = ofsSysInfoCacheNew.getPcentranceurl(); String appentranceurl = ofsSysInfoCacheNew.getAppentranceurl(); String pcurl = data.getPcurl(); String pcurlsrc = ""; if (StringUtils.isNotBlank(pcentranceurl)) { pcurlsrc = data.getPcurl(); pcurl = buildPcUrl(pcentranceurl, data.getId(), data.getPcurl()) + "&isremark=" + data.getIsremark(); } String appurl = data.getAppurl(); String appurlsrc = ""; if (StringUtils.isNotBlank(appentranceurl)) { appurlsrc = data.getAppurl(); appurl = buildAppUrl(appentranceurl, data.getId(), data.getAppurl()) + "&isremark=" + data.getIsremark(); } //更新地址 ofsTodoDataService.updateUrl(Integer.parseInt(data.getId()), data.getFlowid(), pcurlsrc, pcurl, appurlsrc, appurl); data.setPcurl(pcurl); data.setAppurl(appurl); } public void updatePcurlAndAppurlInDone(OfsSysInfoCacheNew ofsSysInfoCacheNew, OfsTodoData data) { //单点登录地址 String pcentranceurl = ofsSysInfoCacheNew.getPcentranceurl(); String appentranceurl = ofsSysInfoCacheNew.getAppentranceurl(); String pcurl = data.getPcurl(); String pcurlsrc = ""; if (StringUtils.isNotBlank(pcentranceurl)) { pcurlsrc = data.getPcurl(); pcurl = buildPcUrl(pcentranceurl, data.getId(), data.getPcurl()) + "&isremark=" + data.getIsremark(); } String appurl = data.getAppurl(); String appurlsrc = ""; if (StringUtils.isNotBlank(appentranceurl)) { appurlsrc = data.getAppurl(); appurl = buildAppUrl(appentranceurl, data.getId(), data.getAppurl()) + "&isremark=" + data.getIsremark(); } //更新地址 ofsDoneDataService.updateUrlInDone(Integer.parseInt(data.getId()), data.getFlowid(), pcurlsrc, pcurl, appurlsrc, appurl); data.setPcurl(pcurl); data.setAppurl(appurl); } public String buildSysName(OfsTodoData data) { //显示异构系统名称 // OfsSettingCacheNew ofsSettingCacheNew = new OfsSettingCacheNew(); // ofsSettingCacheNew.next(); // String OfsSetting_showsysname = ofsSettingCacheNew.getShowsysname(); // OfsSysInfoCacheNew ofsSysInfoCacheNew = new OfsSysInfoCacheNew(); // String OfsSysInfo_sysshortname = ""; // String OfsSysInfo_sysfullname = ""; // while(ofsSysInfoCacheNew.next()){ // if(data.getSyscode().equals(ofsSysInfoCacheNew.getSyscode())){ // OfsSysInfo_sysshortname = ofsSysInfoCacheNew.getSysshortname();//异构系统简称 // OfsSysInfo_sysfullname = ofsSysInfoCacheNew.getSysfullname();//异构系统全称 // break; // } // } OfsSettingCacheDAO ofsSettingCacheDAO = new OfsSettingCacheDAO(); OfsSetting ofsSettingCache = ofsSettingCacheDAO.getOfsSettingCache(); String OfsSetting_showsysname = ofsSettingCache.getShowsysname(); OfsSysInfoCacheDAO ofsSysInfoCacheDAO = new OfsSysInfoCacheDAO(); OfsSysInfo ofsSysInfoCache = ofsSysInfoCacheDAO.getOfsSysInfoCacheBySysCode(data.getSyscode()); String OfsSysInfo_sysshortname = ofsSysInfoCache.getSysshortname(); String OfsSysInfo_sysfullname = ofsSysInfoCache.getSysfullname(); 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; } public void sendMsgCenter(RemindMessage msg, int ismsgcenter) { String channels = msg.getChannel(); List channelList = new ArrayList<>(); log.info("前端传入的消息类型ID:" + channels); if (StringUtils.isNotBlank(channels)) { channelList = Arrays.asList(channels.split(",")); } Map> accessConfig = null; ConfigManager configManager = new ConfigManager(); if ("8".equals(msg.getData().getIsremark())) { accessConfig = configManager.defaultRuleCheckConfig(MessageType.OTHER_MAILWAIT_READ, Util.getIntValue(msg.getData().getUserid()), null); } else { accessConfig = configManager.defaultRuleCheckConfig(MessageType.OTHER_MAILWAIT_REMIND, Util.getIntValue(msg.getData().getUserid()), null); } if (accessConfig != null && accessConfig.size() > 0) { //判断是否推送到消息中心 // OfsSettingCacheNew ofsSettingCacheNew = new OfsSettingCacheNew(); // ofsSettingCacheNew.next(); // String messagecenter = ofsSettingCacheNew.getMessagecenter(); OfsSettingCacheDAO ofsSettingCacheDAO = new OfsSettingCacheDAO(); OfsSetting ofsSettingCache = ofsSettingCacheDAO.getOfsSettingCache(); String messagecenter = ofsSettingCache.getMessagecenter(); if ("1".equals(messagecenter) || ismsgcenter == 1) { for (Map.Entry> 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(msg.getData().getCreatorid()), 0); int langId = 7; String userName = ""; if (user != null) { langId = user.getLanguage(); userName = user.getLastname(); } String detailContent = SystemEnv.getHtmlLabelName(882, langId) + ":" + userName; detailContent += "
"; detailContent += SystemEnv.getHtmlLabelName(1339, langId) + ":" + msg.getData().getCreatedate() + " " + msg.getData().getCreatetime(); if ("8".equals(msg.getData().getIsremark())) { message = Util_Message.createMessage(MessageType.OTHER_MAILWAIT_READ, Integer.parseInt(msg.getData().getUserid()), msg.getData().getRequestname(), "" + "${}" + msg.getSysname() + "", detailContent, msg.getData().getPcurl(), msg.getData().getAppurl(), Util.getIntValue(msg.getData().getCreatorid(), 0)); } else { message = Util_Message.createMessage(MessageType.OTHER_MAILWAIT_REMIND, Integer.parseInt(msg.getData().getUserid()), msg.getData().getRequestname(), "" + "${}" + msg.getSysname() + "", detailContent, msg.getData().getPcurl(), msg.getData().getAppurl(), Util.getIntValue(msg.getData().getCreatorid(), 0)); } message.setBizState("0"); if ("2".equals(msg.getData().getIsremark()) || "4".equals(msg.getData().getIsremark())) { message.setBizState("1"); } //TODO 获取syscode和flowid作为TargetId // RecordSet rs = new RecordSet(); // rs.executeQuery("select * from ofs_todo_data where id = ?" ,msg.getData().getId()); // rs.next(); // String syscode = rs.getString("syscode"); // String flowid = rs.getString("flowid"); String syscode = msg.getData().getSyscode(); String flowid = msg.getData().getFlowid(); message.setTargetId(syscode + "_" + flowid); Map detailTitleParams = message.getDetailTitleParams(); detailTitleParams.put("workflow_name", msg.getData().getWorkflowname()); detailTitleParams.put("system_name", msg.getSysname()); } catch (IOException e) { e.printStackTrace(); } // 5、获取新的自定义消息类型 WeaMessageTypeConfig config1 = entry.getKey(); /* * 1. 当不配置消息类型id时,默认走所有的消息类型。 * 2. 当配置消息类型id时,只走配置的消息类型。 * 3. 当只开启外部的开关,所有的消息类型都发送。 */ log.info("1从WeaMessageTypeConfig类中匹配到的消息类型ID:" + config1.getId()); boolean flag = false; if (StringUtils.isBlank(channels)) { message.setMessageConfig(config1); } else { for (String channel : channelList) { if (config1.getId().equals(channel)) { flag = true; break; } } if (flag) { message.setMessageConfig(config1); } else { continue; } } // 7、设置检查配置通过需要发送消息的用户 message.setUserList(Sets.newHashSet(entry.getValue())); // String showPC = msg.getOfsSysInfoCacheNew().getShowpc() ; //PC显示 String showPC = msg.getOfsSysInfo().getShowpc(); //PC显示 if (!"1".equals(showPC)) { message.setEnablePC("n"); } // String showAPP = msg.getOfsSysInfoCacheNew().getShowapp() ; //APP显示 String showAPP = msg.getOfsSysInfo().getShowapp(); //APP显示 log.info("showPC and showAPP is : " + showPC + " || " + showAPP); if (!"1".equals(showAPP)) { message.setEnableEM("n"); message.setSendMobile("n"); } MessageType messageType = MessageType.newInstance(130); message.setMessageType(messageType); String s = JSONObject.toJSONString(message); try { if (isOpen()) { new BaseBean().writeLog("推送消息===" + s); new BaseBean().writeLog("推送消息类===" + this.getClass().getName()); String linkMobileUrl = message.getLinkMobileUrl(); new BaseBean().writeLog("linkMobileUrl===" + linkMobileUrl); Map parameters = parseUrlParameters(linkMobileUrl); new BaseBean().writeLog("linkMobileUrl===" + parameters); String workflowId = parameters.get("workflowId"); new BaseBean().writeLog("workflowId===" + workflowId); String title = getTitlebyOfswfid(workflowId); new BaseBean().writeLog("title===" + title); if (!StringUtils.isEmpty(title)) { message.setTitle(title); } // message.setMessageGroupType(); // message.setAgentId("86"); // message.setMessageGroupTypeName("[dfefgr]"); // message.setDetailTitle(""); // message.setDetailTitleParams(null); } new BaseBean().writeLog("推送消息===" + JSONObject.toJSONString(message)); } catch (Exception e) { new BaseBean().writeLog("推送消息异常===" + e.getMessage()); e.printStackTrace(); } // 8、发送消息 try { Util_Message.sendAndpublishMessage(message); } catch (IOException e) { e.printStackTrace(); } } } } } public void defaultSelect(String syscode, String OfsWorkflow_workflowid) { //TODO 创建成功,添加默认选中 try { Class clazz = Class.forName("weaver.page.element.WfCenterInterface"); //type typeid==sysid flowid===workflowid //content 具体值 Method method = clazz.getDeclaredMethod("setWfCenterDefaultData", String.class, String.class); RecordSet rs = new RecordSet(); rs.executeQuery("select * from ofs_sysinfo where syscode = ?", syscode); rs.next(); String sysid = rs.getString("sysid"); Object instance = clazz.newInstance(); method.invoke(instance, "typeid", sysid); method.invoke(instance, "flowid", OfsWorkflow_workflowid); log.error("flowid:" + OfsWorkflow_workflowid); } catch (Exception e) { e.printStackTrace(); log.error("添加门户的默认选中失败", e); } } public OfsSysInfoCacheNew getOfsSysInfoCache(OfsTodoData data) { OfsSysInfoCacheNew ofsSysInfoCacheNew = new OfsSysInfoCacheNew(); while (ofsSysInfoCacheNew.next()) { String syscode1 = data.getSyscode(); String syscode2 = ofsSysInfoCacheNew.getSyscode(); if (syscode1.equals(syscode2)) { return ofsSysInfoCacheNew; } } return null; } /** * 保存日志 */ public Map saveLog( String sysid, String datatype, String opertype, String operresult, String failremark, OfsTodoData todoData ) { String[] data = datatype.split("_"); datatype = data[0]; String dataid = data[1]; ofsLogService.insert( sysid, datatype, dataid, opertype, operresult, failremark, todoData.getSyscode(), todoData.getFlowid(), todoData.getRequestname(), todoData.getWorkflowname(), todoData.getNodename(), todoData.getIsremark(), todoData.getPcurl(), todoData.getAppurl(), todoData.getCreator(), todoData.getCreatorid(), todoData.getCreatedate(), todoData.getCreatetime(), todoData.getReceiver(), todoData.getUserid(), todoData.getReceivedate(), todoData.getReceivetime(), todoData.getReceivets() ); return buildReceiveTodoRequest( todoData.getSyscode(), datatype, opertype, operresult, failremark ); } /** * 构造处理接收待办信息的结果到map中 */ public Map buildReceiveTodoRequest( String syscode, String dataType, String operType, String operResult, String message ) { Map map = new HashMap(); map.put("syscode", syscode); map.put("dataType", dataType); map.put("operType", operType); map.put("operResult", operResult); map.put("message", message); return map; } public static Map parseUrlParameters(String url) { Map parameters = new HashMap<>(); try { // URL parsedUrl = new URL(url); // String query = parsedUrl.getQuery(); url = url.substring(url.indexOf("?") + 1); if (url != null) { String[] pairs = url.split("&"); for (String pair : pairs) { String[] keyValue = pair.split("="); if (keyValue.length == 2) { String key = keyValue[0]; String value = keyValue[1]; parameters.put(key, value); } } } } catch (Exception e) { e.printStackTrace(); } return parameters; } public static String getTitlebyOfswfid(String ofswfid) { String sql = "select title from uf_ofsMsgtitle where wfid = ?"; RecordSet recordSet = new RecordSet(); recordSet.executeQuery(sql, ofswfid); String title = ""; if (recordSet.next()) { title = Util.null2String(recordSet.getString("title")); } return title; } public static void main(String[] args) { String s = "/interface/transfer/ofsTrance.jsp?type=app&sysId=-2&workflowId=-111&flowId=794193549238206464&_weaverofsmsg=1&_ec_ismobile=true"; System.out.println(parseUrlParameters(s)); } //配置文件是否开启 private boolean isOpen() { String isopen = new BaseBean().getPropValue("updateMsgTitle", "isopen"); return "1".equals(isopen); // return true; } }