|
@@ -1,18 +1,28 @@
|
|
|
package com.kingdee.eas.custom.messageWebService;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.kingdee.bos.BOSException;
|
|
|
import com.kingdee.bos.Context;
|
|
|
import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
|
|
|
+import com.kingdee.bos.util.BOSUuid;
|
|
|
+import com.kingdee.bos.workflow.metas.AssignFactory;
|
|
|
+import com.kingdee.bos.workflow.metas.AssignInfo;
|
|
|
+import com.kingdee.bos.workflow.metas.IAssign;
|
|
|
+import com.kingdee.bos.workflow.metas.WfAssignmentState;
|
|
|
import com.kingdee.eas.base.message.*;
|
|
|
import com.kingdee.eas.base.message.webservice.MessageWebServiceDao;
|
|
|
import com.kingdee.eas.base.message.webservice.WSMessage;
|
|
|
import com.kingdee.eas.base.message.webservice.WfrAssignMessage;
|
|
|
import com.kingdee.eas.base.message.webservice.WfrProcMessage;
|
|
|
+import com.kingdee.eas.basedata.person.IPerson;
|
|
|
+import com.kingdee.eas.basedata.person.PersonFactory;
|
|
|
+import com.kingdee.eas.basedata.person.PersonInfo;
|
|
|
import okhttp3.*;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.log4j.Logger;
|
|
|
|
|
|
import java.io.FileInputStream;
|
|
|
+import java.io.IOException;
|
|
|
import java.net.URLEncoder;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.Date;
|
|
@@ -26,6 +36,17 @@ import java.util.Properties;
|
|
|
*/
|
|
|
public class OAMessageWebServiceDao implements MessageWebServiceDao {
|
|
|
private static Logger logger = Logger.getLogger(OAMessageWebServiceDao.class);
|
|
|
+ private Properties prop = new Properties();
|
|
|
+ String propPath = System.getProperty("EAS_HOME") + "/server/properties/scy/receiveOAConfig.properties";
|
|
|
+
|
|
|
+ public OAMessageWebServiceDao() {
|
|
|
+ try {
|
|
|
+ prop.load(new FileInputStream(propPath));
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException("OA待办消息 获取配置文件失败!" + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 发送消息
|
|
@@ -35,16 +56,194 @@ public class OAMessageWebServiceDao implements MessageWebServiceDao {
|
|
|
*/
|
|
|
@Override
|
|
|
public boolean addMessage(WSMessage message) {
|
|
|
- logger.error("*********OAMessageWebServiceDao 消息监听开始**********");
|
|
|
+ logger.error("*********OAMessageWebServiceDao addMessage 消息监听开始**********");
|
|
|
+ return sendMessage(message, "0", "0");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除消息
|
|
|
+ *
|
|
|
+ * @param s
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public boolean removeMessage(String s) {
|
|
|
+ logger.error("*********OAMessageWebServiceDao removeMessage111 消息监听开始**********");
|
|
|
+ logger.error("*********OAMessageWebServiceDao s " + s);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除消息
|
|
|
+ *
|
|
|
+ * @param s
|
|
|
+ * @param context
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public boolean removeMessage(String s, Context context) {
|
|
|
+ logger.error("*********OAMessageWebServiceDao removeMessage222 消息监听开始**********");
|
|
|
+ logger.error("*********OAMessageWebServiceDao s " + s);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新消息
|
|
|
+ *
|
|
|
+ * @param s
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public boolean updateMessage(String s) {
|
|
|
+ logger.error("*********OAMessageWebServiceDao updateMessages444 消息监听开始**********");
|
|
|
+ logger.error("*********OAMessageWebServiceDao s " + s);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新消息
|
|
|
+ *
|
|
|
+ * @param s
|
|
|
+ * @param context
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public boolean updateMessage(String s, Context context) {
|
|
|
+ logger.error("*********OAMessageWebServiceDao updateMessages3333 消息监听开始**********");
|
|
|
+ logger.error("*********OAMessageWebServiceDao s " + s);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param s
|
|
|
+ * @param msgStatus
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public boolean updateMessages(String s, MsgStatus msgStatus) {
|
|
|
+ logger.error("*********OAMessageWebServiceDao updateMessages111 消息监听开始**********");
|
|
|
+ logger.error("*********OAMessageWebServiceDao s " + s);
|
|
|
+ logger.error("*********OAMessageWebServiceDao msgStatus " + msgStatus.getAlias());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean updateMessages(String id, MsgStatus msgStatus, Context ctx) {
|
|
|
+ logger.error("*********OAMessageWebServiceDao updateMessages2222 消息监听开始**********");
|
|
|
+ logger.error("*********OAMessageWebServiceDao id " + id);
|
|
|
+ logger.error("*********OAMessageWebServiceDao msgStatus " + msgStatus.getAlias());
|
|
|
+ BOSUuid bosId = BOSUuid.read(id);
|
|
|
+ String bosType = bosId.getType().toString();
|
|
|
+ logger.error("*********OAMessageWebServiceDao bosType " + bosType);
|
|
|
+ if ("9623EB51".equals(bosType)) {
|
|
|
+ try {
|
|
|
+ //任务阅读表
|
|
|
+ IAssignRead assignReadIns = AssignReadFactory.getLocalInstance(ctx);
|
|
|
+ AssignReadInfo assignReadInfo = assignReadIns.getAssignReadInfo(new ObjectUuidPK(id));
|
|
|
+ String assignID = assignReadInfo.getAssignID().toString();
|
|
|
+ IAssign iAssign = AssignFactory.getLocalInstance(ctx);
|
|
|
+ IPerson iPerson = PersonFactory.getLocalInstance(ctx);
|
|
|
+ AssignInfo assignInfo = iAssign.getValue(new ObjectUuidPK(assignID));
|
|
|
+ WSMessage wsMessage = new WSMessage();
|
|
|
+ wsMessage.setMsgID(id);
|
|
|
+ wsMessage.setTitle(assignInfo.getSubject());
|
|
|
+ wsMessage.setBillId(assignInfo.getBizObjID());
|
|
|
+ wsMessage.setContext(ctx);
|
|
|
+ String priorPerformerID = assignInfo.getPriorPerformerID();
|
|
|
+ PersonInfo sender = iPerson.getPersonInfo(new ObjectUuidPK(priorPerformerID));
|
|
|
+ wsMessage.setSenderNumber(sender.getNumber());
|
|
|
+ wsMessage.setSender(sender.getName());
|
|
|
+ String personEmpId = assignInfo.getPersonEmpID().toString();
|
|
|
+ PersonInfo reciever = iPerson.getPersonInfo(new ObjectUuidPK(personEmpId));
|
|
|
+ wsMessage.setReceivers(reciever.getName());
|
|
|
+ wsMessage.setRecieveNumber(reciever.getNumber());
|
|
|
+ wsMessage.setRecieverID(personEmpId);
|
|
|
+ if (MsgStatus.READED.equals(msgStatus)) {
|
|
|
+ //已读
|
|
|
+ return sendMessage(wsMessage, "0", "1");
|
|
|
+ } else {
|
|
|
+ return sendMessage(wsMessage, "0", "0");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean addInitiatorMessage(WfrProcMessage wfrProcMessage) {
|
|
|
+ logger.error("*********OAMessageWebServiceDao addInitiatorMessage 消息监听开始**********");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 任务完成时触发
|
|
|
+ * 之后会触发 com.kingdee.eas.custom.messageWebService.OAMessageWebServiceDao#removeMessage(java.lang.String, com.kingdee.bos.Context)
|
|
|
+ * 之后会触发 com.kingdee.eas.custom.messageWebService.OAMessageWebServiceDao#addInitiatorMessage(com.kingdee.eas.base.message.webservice.WfrProcMessage)
|
|
|
+ *
|
|
|
+ * @param wfrAssignMessage
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public boolean addCompletedMessage(WfrAssignMessage wfrAssignMessage) {
|
|
|
+ try {
|
|
|
+ logger.error("*********OAMessageWebServiceDao addCompletedMessage 消息监听开始**********");
|
|
|
+ String assignId = wfrAssignMessage.getAssignId();
|
|
|
+ logger.error("*********OAMessageWebServiceDao assignId " + assignId);
|
|
|
+ String assignSubject = wfrAssignMessage.getAssignSubject();
|
|
|
+ String billID = wfrAssignMessage.getBillID();
|
|
|
+ String handler = wfrAssignMessage.getHandler();
|
|
|
+ String handlerNumber = wfrAssignMessage.getHandlerNumber();
|
|
|
+ String state = wfrAssignMessage.getState();
|
|
|
+ logger.error("*********OAMessageWebServiceDao state " + state);
|
|
|
+ WfAssignmentState stateEnum = WfAssignmentState.getEnum(state);
|
|
|
+ Context ctx = wfrAssignMessage.getCtx();
|
|
|
+ IAssignRead iAssignRead = AssignReadFactory.getLocalInstance(ctx);
|
|
|
+ AssignReadCollection assignReadCollection = iAssignRead.getAssignReadCollection("where assignID='" + assignId + "'");
|
|
|
+ String msgId = null;
|
|
|
+ if (assignReadCollection.size() > 0) {
|
|
|
+ msgId = assignReadCollection.get(0).getId().toString();
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("未找到对应的任务阅读表 assignId: " + assignId);
|
|
|
+ }
|
|
|
+ if (WfAssignmentState.CANCELED.equals(stateEnum)) {
|
|
|
+ //任务取消,删除OA待办
|
|
|
+ return deleteMessage(msgId, handlerNumber);
|
|
|
+ } else if (WfAssignmentState.COMPLETED.equals(stateEnum) || WfAssignmentState.REJECTED.equals(stateEnum)) {
|
|
|
+ //任务完成或已拒绝,更新OA消息为已办
|
|
|
+ WSMessage wsMessage = new WSMessage();
|
|
|
+ wsMessage.setMsgID(msgId);
|
|
|
+ wsMessage.setTitle(assignSubject);
|
|
|
+ wsMessage.setBillId(billID);
|
|
|
+ wsMessage.setContext(ctx);
|
|
|
+ wsMessage.setSenderNumber(wfrAssignMessage.getInitiatorNumber());
|
|
|
+ wsMessage.setSender(wfrAssignMessage.getInitiator());
|
|
|
+ wsMessage.setReceivers(handler);
|
|
|
+ wsMessage.setRecieveNumber(handlerNumber);
|
|
|
+ wsMessage.setRecieverID(wfrAssignMessage.getHandlerId());
|
|
|
+ return sendMessage(wsMessage, "2", "1");
|
|
|
+ }
|
|
|
+ } catch (BOSException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param message
|
|
|
+ * @param isremark 流程处理状态
|
|
|
+ * @param viewtype 流程查看状态
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean sendMessage(WSMessage message, String isremark, String viewtype) {
|
|
|
try {
|
|
|
- Properties prop = new Properties();
|
|
|
- String propPath = System.getProperty("EAS_HOME") + "/server/properties/scy/receiveOAConfig.properties";
|
|
|
- prop.load(new FileInputStream(propPath));
|
|
|
- String receiveOAPath = prop.getProperty("receiveOAPath");
|
|
|
String serverName = prop.getProperty("serverName");
|
|
|
+ String receiveOAPath = prop.getProperty("receiveOAPath");
|
|
|
if (StringUtils.isEmpty(receiveOAPath)) {
|
|
|
- logger.error("发送OA待办消息,推送异步消息地址不能为空! 请检查配置文件: " + propPath);
|
|
|
- return false;
|
|
|
+ throw new RuntimeException("发送OA待办消息,推送异步消息地址不能为空! 请检查配置文件: " + propPath);
|
|
|
}
|
|
|
JSONObject params = new JSONObject();
|
|
|
String syscode = prop.getProperty("syscode", "SHR");
|
|
@@ -57,6 +256,8 @@ public class OAMessageWebServiceDao implements MessageWebServiceDao {
|
|
|
MsgType type = message.getType();
|
|
|
if (type != null) {
|
|
|
params.put("workflowname", type.getAlias());//流程类型名称
|
|
|
+ } else {
|
|
|
+ params.put("workflowname", "任务");
|
|
|
}
|
|
|
String billId = message.getBillId();
|
|
|
logger.error("billId: " + billId);
|
|
@@ -76,8 +277,8 @@ public class OAMessageWebServiceDao implements MessageWebServiceDao {
|
|
|
params.put("pcurl", url);//PC地址(相对路径/开头)
|
|
|
params.put("appurl", url);//APP地址(相对路径/开头)
|
|
|
//params.put("nodename", message.get);//步骤名称(节点名称)
|
|
|
- params.put("isremark", "0");//流程处理状态
|
|
|
- params.put("viewtype", "1");//流程查看状态
|
|
|
+ params.put("isremark", isremark);//流程处理状态
|
|
|
+ params.put("viewtype", viewtype);//流程查看状态
|
|
|
params.put("creator", message.getSenderNumber());//创建人(原值)
|
|
|
params.put("createdatetime", now);//创建日期时间
|
|
|
params.put("receiver", message.getRecieveNumber());//接收人(原值)
|
|
@@ -96,6 +297,7 @@ public class OAMessageWebServiceDao implements MessageWebServiceDao {
|
|
|
Response response = client.newCall(request).execute();
|
|
|
if (response.isSuccessful()) {
|
|
|
String result = response.body().string();
|
|
|
+ logger.error("addMessage -> result:" + result);
|
|
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
String operResult = jsonObject.getString("operResult");
|
|
|
if ("1".equals(operResult)) {
|
|
@@ -113,73 +315,50 @@ public class OAMessageWebServiceDao implements MessageWebServiceDao {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 删除消息
|
|
|
- *
|
|
|
- * @param s
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public boolean removeMessage(String s) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除消息
|
|
|
- *
|
|
|
- * @param s
|
|
|
- * @param context
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public boolean removeMessage(String s, Context context) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 更新消息
|
|
|
- *
|
|
|
- * @param s
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public boolean updateMessage(String s) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 更新消息
|
|
|
+ * 删除待办
|
|
|
*
|
|
|
- * @param s
|
|
|
- * @param context
|
|
|
+ * @param flowId
|
|
|
+ * @param userId
|
|
|
* @return
|
|
|
*/
|
|
|
- @Override
|
|
|
- public boolean updateMessage(String s, Context context) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param s
|
|
|
- * @param msgStatus
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public boolean updateMessages(String s, MsgStatus msgStatus) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean updateMessages(String s, MsgStatus msgStatus, Context context) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean addInitiatorMessage(WfrProcMessage wfrProcMessage) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean addCompletedMessage(WfrAssignMessage wfrAssignMessage) {
|
|
|
+ private boolean deleteMessage(String flowId, String userId) {
|
|
|
+ try {
|
|
|
+ OkHttpClient client = new OkHttpClient();
|
|
|
+ JSONObject params = new JSONObject();
|
|
|
+ String deleteMsgPath = prop.getProperty("deleteMsgPath");
|
|
|
+ if (StringUtils.isEmpty(deleteMsgPath)) {
|
|
|
+ throw new RuntimeException("删除OA消息地址不能为空! 请检查配置文件: " + propPath);
|
|
|
+ }
|
|
|
+ String syscode = prop.getProperty("syscode", "SHR");
|
|
|
+ params.put("syscode", syscode);
|
|
|
+ params.put("flowid", flowId);
|
|
|
+ params.put("userid", userId);
|
|
|
+ String paramsStr = params.toString();
|
|
|
+ logger.error("OAMessageWebServiceDao deleteMessage-> params:" + paramsStr);
|
|
|
+ MediaType mediaType = MediaType.parse("application/json");
|
|
|
+ RequestBody body = RequestBody.create(mediaType, paramsStr);
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url(deleteMsgPath)
|
|
|
+ .post(body)
|
|
|
+ .addHeader("content-type", "application/json")
|
|
|
+ .build();
|
|
|
+ Response response = client.newCall(request).execute();
|
|
|
+ if (response.isSuccessful()) {
|
|
|
+ String result = response.body().string();
|
|
|
+ logger.error("deleteMessage -> result:" + result);
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
+ String operResult = jsonObject.getString("operResult");
|
|
|
+ if ("1".equals(operResult)) {
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ logger.error(jsonObject.getString("message"));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ logger.error("删除OA待办消息 超时");
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
return false;
|
|
|
}
|
|
|
}
|