|
@@ -0,0 +1,538 @@
|
|
|
+package nckd.jimin.jyyy.bd.plugin.msg.ecology;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import kd.bos.bec.api.IEventServicePlugin;
|
|
|
+import kd.bos.bec.model.EntityEvent;
|
|
|
+import kd.bos.bec.model.JsonEvent;
|
|
|
+import kd.bos.bec.model.KDBizEvent;
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
+import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
+import kd.bos.dataentity.resource.ResManager;
|
|
|
+import kd.bos.exception.ErrorCode;
|
|
|
+import kd.bos.exception.KDException;
|
|
|
+import kd.bos.logging.Log;
|
|
|
+import kd.bos.logging.LogFactory;
|
|
|
+import kd.bos.orm.query.QCP;
|
|
|
+import kd.bos.orm.query.QFilter;
|
|
|
+import kd.bos.sdk.util.KHttpClientUtils;
|
|
|
+import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
+import kd.bos.util.StringUtils;
|
|
|
+import kd.bos.workflow.engine.WfUtils;
|
|
|
+import kd.bos.workflow.engine.msg.ctx.MessageContext;
|
|
|
+import kd.bos.workflow.engine.msg.info.MessageInfo;
|
|
|
+import kd.bos.workflow.exception.WFErrorCode;
|
|
|
+import kd.bos.workflow.exception.WFMessageServiceException;
|
|
|
+import nckd.base.helper.CommonHelperUtils;
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author wanghaiwu_kd
|
|
|
+ * @date 2024/04/22
|
|
|
+ * 插件说明:业务事件中心插件
|
|
|
+ * 表单标识:消息阅读状态变更事件.执行插件(wf.AfterChangeMessageStateEvent.executePlugin)
|
|
|
+ */
|
|
|
+public class ChangeMessageStatePlugin implements IEventServicePlugin {
|
|
|
+ private static Log logger = LogFactory.getLog(ChangeMessageStatePlugin.class);
|
|
|
+ private static String KEY_ENTITY_LOG = "nckd_ecology";
|
|
|
+ //
|
|
|
+ private static String param_url = "";
|
|
|
+ private static String param_msgurl = "";
|
|
|
+ //注册企业id
|
|
|
+ private static String param_cropid = "";
|
|
|
+ private static String param_responsetype = "";
|
|
|
+ private static String param_state = "";
|
|
|
+ private static String param_appkey = "";
|
|
|
+ private static String param_appsecret = "";
|
|
|
+ private static String param_granttype = "";
|
|
|
+ private static String param_secretkey = "";
|
|
|
+ private static String param_syscode = "";
|
|
|
+ private static String param_getcode = "";
|
|
|
+ private static String param_gettoken = "";
|
|
|
+ private static String param_sendflow = "";
|
|
|
+ private static String param_receiver_dev = "";
|
|
|
+
|
|
|
+ private static void setParmamValue(){
|
|
|
+ String selectField = "nckd_entryentity.nckd_key, nckd_entryentity.nckd_value";
|
|
|
+
|
|
|
+ QFilter qFilter = new QFilter("number", QCP.equals, "fanwei");
|
|
|
+ DynamicObject commonParam = BusinessDataServiceHelper.loadSingle("nckd_commonparams", selectField, qFilter.toArray());
|
|
|
+ if (ObjectUtils.isEmpty(commonParam)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicObjectCollection entryentity = commonParam.getDynamicObjectCollection("nckd_entryentity");
|
|
|
+ Map<String, String> mapentity = entryentity.stream().collect(Collectors.toMap(k -> k.getString("nckd_key"), v -> v.getString("nckd_value")));
|
|
|
+ if(mapentity != null ){
|
|
|
+ param_url = mapentity.get("url");
|
|
|
+ param_msgurl = mapentity.get("msgurl");
|
|
|
+ param_cropid = mapentity.get("corpid");
|
|
|
+ param_responsetype = mapentity.get("response_type");
|
|
|
+ param_state = mapentity.get("state");
|
|
|
+ param_appkey = mapentity.get("app_key");
|
|
|
+ param_appsecret = mapentity.get("app_secret");
|
|
|
+ param_granttype = mapentity.get("grant_type");
|
|
|
+ param_secretkey = mapentity.get("secret_key");
|
|
|
+ param_syscode = mapentity.get("syscode");
|
|
|
+ param_getcode = mapentity.get("getcode");
|
|
|
+
|
|
|
+ param_gettoken = mapentity.get("gettoken");
|
|
|
+ param_sendflow = mapentity.get("sendflow");
|
|
|
+ param_receiver_dev = mapentity.get("receiver_dev");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Object handleEvent(KDBizEvent evt) {
|
|
|
+ logger.info("泛微消息阅读状态变更事件" + evt.toString());
|
|
|
+
|
|
|
+ if (evt instanceof EntityEvent) {//苍穹事件
|
|
|
+ EntityEvent entityEvent = (EntityEvent) evt;//类型转换
|
|
|
+ String businesskey = entityEvent.getBusinesskeys().get(0);
|
|
|
+ String entityNumber = entityEvent.getEntityNumber();
|
|
|
+ DynamicObject obj = BusinessDataServiceHelper.loadSingle(businesskey, entityNumber);
|
|
|
+ Long evtID = evt.getEventId();
|
|
|
+ String source = evt.getSource();//传递的事件参数
|
|
|
+ } else {//自定义事件
|
|
|
+ JsonEvent jsonEvent = (JsonEvent) evt;//类型转换
|
|
|
+ String source = jsonEvent.getSource();//传递的事件参数
|
|
|
+ if (WfUtils.isNotEmpty(source)) {
|
|
|
+ setParmamValue();
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(param_sendflow)) {
|
|
|
+ logger.info("泛微消息阅读状态变更事件 is fail :未配置泛微参数sendflow!");
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONArray arr = (JSONArray) JSON.parse(source);
|
|
|
+ for (int i = 0; i < arr.size(); i++) {
|
|
|
+ if(arr.getJSONObject(i) == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //消息id
|
|
|
+ String msgIds = arr.getJSONObject(i).getString("msgIds");
|
|
|
+
|
|
|
+ logger.info("泛微消息阅读状态变更事件:msgIds" + msgIds);
|
|
|
+
|
|
|
+ //用户id
|
|
|
+ String userId = arr.getJSONObject(i).getString("userId");
|
|
|
+ //状态
|
|
|
+ String state = arr.getJSONObject(i).getString("state");
|
|
|
+
|
|
|
+ if(StringUtils.isEmpty(msgIds)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ updateEcologyMsgState(userId, msgIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新消息状态
|
|
|
+ * @param userId
|
|
|
+ * @param msgIds
|
|
|
+ */
|
|
|
+ private void updateEcologyMsgState(String userId, String msgIds){
|
|
|
+ QFilter qFilter = new QFilter("id", QCP.equals, Long.valueOf(userId));
|
|
|
+ //接收人员
|
|
|
+ DynamicObject user = BusinessDataServiceHelper.loadSingle("bos_user", qFilter.toArray());
|
|
|
+ String personNo = user.getString("number");
|
|
|
+
|
|
|
+ msgIds = msgIds.replace("[", "").replace("]", "");
|
|
|
+ String[] msgIdList = msgIds.split(",");
|
|
|
+ if(msgIdList.length == 0){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ for(String msgId : msgIdList){
|
|
|
+ logger.info("泛微消息阅读状态变更事件:替换前 msgId:" + msgId);
|
|
|
+ msgId = msgId.replace("\"", "");
|
|
|
+ logger.info("泛微消息阅读状态变更事件:替换后msgId:" + msgId);
|
|
|
+
|
|
|
+ qFilter = new QFilter("channel", QCP.equals, "fanwei");
|
|
|
+ qFilter.and(new QFilter("messageid", QCP.equals, Long.valueOf(msgId)));
|
|
|
+ DynamicObject msgFail = BusinessDataServiceHelper.loadSingle("wf_msg_failmessage", qFilter.toArray());
|
|
|
+
|
|
|
+ if(msgFail == null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Long channelMsgId = msgFail.getLong("id");
|
|
|
+ String tplscene = msgFail.getString("tplscene");
|
|
|
+ String oaId = "";
|
|
|
+
|
|
|
+ if("circulation".equals(tplscene)){
|
|
|
+ oaId = "KD-" + channelMsgId + "-" + personNo;
|
|
|
+ }
|
|
|
+
|
|
|
+ sendMsg2Ecology(Long.valueOf(userId), Long.valueOf(msgId), oaId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void sendMsg2Ecology(Long userId, Long msgId, String oaId){
|
|
|
+ JSONObject fanweiBodyData = null;
|
|
|
+
|
|
|
+ QFilter qFilter = new QFilter("nckd_oaid", QCP.equals, oaId);
|
|
|
+ DynamicObject ecologyLog = BusinessDataServiceHelper.loadSingle("nckd_ecology", qFilter.toArray());
|
|
|
+
|
|
|
+ if(ecologyLog == null){
|
|
|
+ //根据消息Id组合OA消息对象
|
|
|
+ fanweiBodyData = buildMessageBodyData(userId, msgId, oaId);
|
|
|
+ } else {
|
|
|
+ String sendData = ecologyLog.getString("nckd_senddata_tag");
|
|
|
+ if(StringUtils.isEmpty(sendData)){
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ fanweiBodyData = JSONObject.parseObject(sendData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String createTime = sdf.format(new Date());
|
|
|
+ String curTimestamp = String.valueOf(System.currentTimeMillis());
|
|
|
+
|
|
|
+
|
|
|
+ //流程处理状态:0:待办,2:已办,4:办结,8:抄送(待阅)
|
|
|
+ fanweiBodyData.put("isremark", "2");
|
|
|
+ //流程查看状态:0:未读,1:已读
|
|
|
+ fanweiBodyData.put("viewtype", "1");
|
|
|
+ //接收时间
|
|
|
+ fanweiBodyData.put("receivedatetime", createTime);
|
|
|
+ //接收时间戳
|
|
|
+ fanweiBodyData.put("receivets", curTimestamp);
|
|
|
+
|
|
|
+
|
|
|
+ logger.info("消息阅读状态变更事件:" + fanweiBodyData.toString());
|
|
|
+
|
|
|
+
|
|
|
+ String token = getFanWeiToken(false);
|
|
|
+ String bodyString = "";
|
|
|
+ String url = "";
|
|
|
+ String result = "";
|
|
|
+
|
|
|
+ Map<String, String> header = new HashMap<>();
|
|
|
+ header.put("Content-Type", "application/json; charset=UTF-8");
|
|
|
+
|
|
|
+ //获取token
|
|
|
+ try {
|
|
|
+ url = param_sendflow + "?access_token=" + token + "&secret_key=" + param_secretkey;
|
|
|
+ logger.info("泛微发送消息接口地址:" + url);
|
|
|
+ bodyString = CommonHelperUtils.buildEsbApiBodyJSON(fanweiBodyData);
|
|
|
+ result = KHttpClientUtils.postjson(url, header, bodyString);
|
|
|
+ } catch (IOException e) {
|
|
|
+ logger.info(e.getMessage());
|
|
|
+
|
|
|
+ String message = ResManager.loadKDString("泛微消息阅读状态更新失败,原因:%s", "WFErrorCode_10001", "bos-wf-engine", new Object[0]);
|
|
|
+ ErrorCode error = new ErrorCode("bos.wf.rpa.", message);
|
|
|
+ throw new WFMessageServiceException(e, error, new Object[]{e.getMessage()});
|
|
|
+ }
|
|
|
+
|
|
|
+ if(StringUtils.isEmpty(result)){
|
|
|
+ logger.info("泛微消息阅读状态更新异常: 接口返回为空");
|
|
|
+ throw new WFMessageServiceException("泛微消息阅读状态更新异常: 接口返回为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONObject msgObj = JSONObject.parseObject(result);
|
|
|
+ if(msgObj.get("message") == null){
|
|
|
+ logger.info("泛微消息阅读状态更新异常: 接口返回message为空");
|
|
|
+// throw new WFMessageServiceException("创建泛微待办异常: 接口返回为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONObject message = msgObj.getJSONObject("message");
|
|
|
+ if(message.get("errcode") == null){
|
|
|
+ logger.info("泛微消息阅读状态更新异常: 接口返回errorcode为空");
|
|
|
+// throw new WFMessageServiceException("创建泛微待办异常: 接口返回为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ String code = message.getString("errcode");
|
|
|
+
|
|
|
+ if(StringUtils.isNotEmpty(code) && "200".equals(code)){
|
|
|
+ logger.info("泛微消息阅读状态更新失败 :" + message.getString("errmsg"));
|
|
|
+ } else {
|
|
|
+ logger.info("泛微消息阅读状态更新成功, 消息id: " + oaId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ logger.info("消息阅读状态变更事件,发送消息:{}, 结果:{}", fanweiBodyData.toJSONString(), result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据 messageid 构造OA消息对象
|
|
|
+ * @param userId
|
|
|
+ * @param msgId
|
|
|
+ * @param oaId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static JSONObject buildMessageBodyData(Long userId, Long msgId, String oaId) {
|
|
|
+ JSONObject bodyData = new JSONObject();
|
|
|
+
|
|
|
+ String isremark = "2";
|
|
|
+ String viewtype = "1";
|
|
|
+
|
|
|
+ QFilter qFilter = new QFilter("id", QCP.equals, Long.valueOf(msgId));
|
|
|
+ DynamicObject info = BusinessDataServiceHelper.loadSingle("wf_msg_message", qFilter.toArray());
|
|
|
+ if(info == null){
|
|
|
+ info = BusinessDataServiceHelper.loadSingle("wf_msg_himessage", qFilter.toArray());
|
|
|
+ }
|
|
|
+
|
|
|
+ if(info == null){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ String content = StringUtils.isEmpty(info.getString("content")) ?
|
|
|
+ info.getString("content_summary") : info.getString("content");
|
|
|
+ if(content == null){
|
|
|
+ content = "";
|
|
|
+ }
|
|
|
+
|
|
|
+ //发送人员
|
|
|
+ Long createUserId = 0L;
|
|
|
+ if(info != null && !StringUtils.isEmpty(info.getString("sender"))){
|
|
|
+ createUserId = Long.valueOf(info.getString("sender"));
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicObject createUser = BusinessDataServiceHelper.loadSingleFromCache(createUserId, "bos_user");
|
|
|
+ String creator = createUser == null ? "" : createUser.getString("number");
|
|
|
+
|
|
|
+ String requestname = info.getString("title") + ", 发送人:" + creator + ", " + content;
|
|
|
+ String nodename = info.getString("operation") == null ? "circulation" : info.getString("operation");
|
|
|
+ String workflowname = "费控人力审批流";
|
|
|
+ String workflowcode = "nobill";
|
|
|
+
|
|
|
+ if(info.getString("config") != null){
|
|
|
+ JSONObject config = JSONObject.parseObject(info.getString("config"));
|
|
|
+ if(config != null) {
|
|
|
+ if(config.get("messageContext") != null){
|
|
|
+ JSONObject messageContext = JSONObject.parseObject(config.get("messageContext").toString());
|
|
|
+ if(messageContext.get("taskId") != null){
|
|
|
+ DynamicObject taskInfo = BusinessDataServiceHelper.loadSingleFromCache(Long.valueOf(messageContext.getString("taskId")), "wf_task");
|
|
|
+ if(taskInfo != null){
|
|
|
+ nodename = taskInfo.getString("name");
|
|
|
+
|
|
|
+ if(taskInfo.getLong("processdefinitionid") > 0){
|
|
|
+ qFilter = new QFilter("id", QCP.equals, taskInfo.getLong("processdefinitionid"));
|
|
|
+ DynamicObject processdef = BusinessDataServiceHelper.loadSingle("wf_processdefinition", qFilter.toArray());
|
|
|
+ if(processdef != null){
|
|
|
+ workflowcode = processdef.getString("key");
|
|
|
+ workflowname = processdef.getString("name");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if("费控人力审批流".equals(workflowname) && taskInfo.getString("entityname") != null){
|
|
|
+ workflowcode = taskInfo.getString("entityname");
|
|
|
+ workflowname = taskInfo.getString("entityname") + "审批流程";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //接收人员
|
|
|
+ DynamicObject user = BusinessDataServiceHelper.loadSingleFromCache(userId, "bos_user");
|
|
|
+ String personNo = user.getString("number");
|
|
|
+ String receiverLong = user.getString("name") + "(" + user.getString("number") + ")";
|
|
|
+
|
|
|
+ //创建时间
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String createTime = sdf.format(new Date());
|
|
|
+ String curTimestamp = String.valueOf(System.currentTimeMillis());
|
|
|
+ String flowid = oaId;
|
|
|
+
|
|
|
+ String pcUrl = info.getString("contenturl") == null ? "" : info.getString("contenturl");
|
|
|
+ String mobUrl = info.getString("mobcontenturl") == null ? pcUrl : info.getString("mobcontenturl");
|
|
|
+
|
|
|
+ String contextUrl = System.getProperty("domain.contextUrl").replace("/ierp", "");
|
|
|
+ pcUrl = pcUrl.replace("http://127.0.0.1:8080", "").replace(contextUrl, "");
|
|
|
+ mobUrl = mobUrl.replace("http://127.0.0.1:8080", "").replace(contextUrl, "");
|
|
|
+
|
|
|
+ logger.info("消息pcurl:" + pcUrl + ", moburl:" + mobUrl);
|
|
|
+
|
|
|
+ //移动端需要走外网,将地址替换成外网地址
|
|
|
+ String curUrl = "";//ParamsUtil.getCommonParamsField("nckd_url");
|
|
|
+ String mobileUrl = "";//ParamsUtil.getCommonParamsField("nckd_mobileurl");
|
|
|
+
|
|
|
+ if(StringUtils.isNotEmpty(pcUrl)){
|
|
|
+ pcUrl = pcUrl.replace(mobileUrl, curUrl);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(StringUtils.isNotEmpty(mobUrl)){
|
|
|
+ mobUrl = mobUrl.replace(curUrl, mobileUrl);
|
|
|
+ }
|
|
|
+
|
|
|
+ if("".equals(pcUrl)||pcUrl==null){
|
|
|
+ pcUrl = System.getProperty("domain.contextUrl")+"/index.html?formId=wf_msg_center";
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ pcUrl = pcUrl + "&msgId=" + msgId + "&closeType=closeWin";
|
|
|
+ mobUrl = mobUrl + "&msgId=" + msgId + "&closeType=closeWin";
|
|
|
+
|
|
|
+ pcUrl = URLEncoder.encode(pcUrl, "utf-8");
|
|
|
+ mobUrl = URLEncoder.encode(mobUrl, "utf-8");
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ //异构系统标识
|
|
|
+ bodyData.put("syscode", param_syscode);
|
|
|
+ //流程实例id
|
|
|
+ bodyData.put("flowid", flowid);
|
|
|
+ //标题
|
|
|
+ bodyData.put("requestname", requestname);
|
|
|
+ //流程类型编码
|
|
|
+ bodyData.put("workflowcode", workflowcode);
|
|
|
+ //流程类型名称
|
|
|
+ bodyData.put("workflowname", workflowname);
|
|
|
+ //接收人所属节点
|
|
|
+ bodyData.put("receivenodename", "");
|
|
|
+ //节点名称
|
|
|
+ bodyData.put("nodename", nodename);
|
|
|
+ //PC地址
|
|
|
+ bodyData.put("pcurl", pcUrl);
|
|
|
+ //APP地址
|
|
|
+ bodyData.put("appurl", mobUrl);
|
|
|
+ //创建人
|
|
|
+ bodyData.put("creator", creator);
|
|
|
+ //创建时间
|
|
|
+ bodyData.put("createdatetime", createTime);
|
|
|
+ //接收人
|
|
|
+ bodyData.put("receiver", personNo);
|
|
|
+
|
|
|
+ //测试人员
|
|
|
+ if(StringUtils.isNotEmpty(param_receiver_dev)) {
|
|
|
+ bodyData.put("receiver", param_receiver_dev);
|
|
|
+ }
|
|
|
+
|
|
|
+ //接收时间
|
|
|
+ bodyData.put("receivedatetime", createTime);
|
|
|
+ //流程处理状态:0:待办,2:已办,4:办结,8:抄送(待阅)
|
|
|
+ bodyData.put("isremark", isremark);
|
|
|
+ //流程查看状态:0:未读,1:已读
|
|
|
+ bodyData.put("viewtype", viewtype);
|
|
|
+ //接收时间戳
|
|
|
+ bodyData.put("receivets", curTimestamp);
|
|
|
+ //接收人+编码,保存日志使用,oa接口不需要此字段。
|
|
|
+ bodyData.put("receiverLong", receiverLong);
|
|
|
+
|
|
|
+ return bodyData;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取泛微OA的accesstoken
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getFanWeiToken(boolean isSerchParam) {
|
|
|
+ if(isSerchParam){
|
|
|
+ setParmamValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ String bodyString = "";
|
|
|
+ String token = "";
|
|
|
+ String result = "";
|
|
|
+ String url = "";
|
|
|
+
|
|
|
+ Map<String, String> header = new HashMap<>();
|
|
|
+ header.put("Content-Type", "application/json; charset=UTF-8");
|
|
|
+
|
|
|
+
|
|
|
+ try {
|
|
|
+ url = param_getcode + "?corpid=" + param_cropid + "&response_type=" + param_responsetype + "&state=" + param_state;
|
|
|
+
|
|
|
+ logger.info("获取泛微code接口地址:" + url);
|
|
|
+ //获取code
|
|
|
+ bodyString = CommonHelperUtils.buildEsbApiBodyJSON(null);
|
|
|
+ result = KHttpClientUtils.postjson(url, header, bodyString);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.info(e.getMessage());
|
|
|
+
|
|
|
+ String message = ResManager.loadKDString("获取泛微code失败,原因:%s", "WFErrorCode_10001", "bos-wf-engine", new Object[0]);
|
|
|
+ ErrorCode error = new ErrorCode("bos.wf.rpa.", message);
|
|
|
+ throw new WFMessageServiceException(e, error, new Object[]{e.getMessage()});
|
|
|
+ }
|
|
|
+
|
|
|
+ if(StringUtils.isEmpty(result)){
|
|
|
+ throw new WFMessageServiceException("获取泛微code异常: 接口返回为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONObject codeObj = JSONObject.parseObject(result);
|
|
|
+ String errcode = codeObj.getString("errcode");
|
|
|
+
|
|
|
+ if(!"0".equals(errcode)) {
|
|
|
+ String errCode = codeObj.getString("errcode") == null ? "" : codeObj.getString("errcode");
|
|
|
+ String errMsg = codeObj.getString("errmsg") == null ? "" : codeObj.getString("errmsg");
|
|
|
+
|
|
|
+ throw new WFMessageServiceException("获取泛微code异常: " + errMsg + "(" + errCode + ")");
|
|
|
+ }
|
|
|
+ String code = codeObj.getString("code");
|
|
|
+
|
|
|
+ //获取token
|
|
|
+ try {
|
|
|
+ url = param_gettoken + "?app_key=" + param_appkey + "&app_secret=" + param_appsecret + "&grant_type=" + param_granttype + "&code=" + code;
|
|
|
+ logger.info("获取泛微token接口地址:" + url);
|
|
|
+
|
|
|
+ bodyString = CommonHelperUtils.buildEsbApiBodyJSON(null);
|
|
|
+
|
|
|
+ result = KHttpClientUtils.postjson(url, header, bodyString);
|
|
|
+ } catch (IOException e) {
|
|
|
+ logger.info(e.getMessage());
|
|
|
+
|
|
|
+ String message = ResManager.loadKDString("获取泛微token失败,原因:%s", "WFErrorCode_10001", "bos-wf-engine", new Object[0]);
|
|
|
+ ErrorCode error = new ErrorCode("bos.wf.rpa.", message);
|
|
|
+ throw new WFMessageServiceException(e, error, new Object[]{e.getMessage()});
|
|
|
+ }
|
|
|
+
|
|
|
+ if(StringUtils.isEmpty(result)){
|
|
|
+ throw new WFMessageServiceException("获取泛微token异常: 接口返回为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONObject tokenObj = JSONObject.parseObject(result);
|
|
|
+ errcode = tokenObj.getString("errcode");
|
|
|
+
|
|
|
+ if(!"0".equals(errcode)) {
|
|
|
+ String errCode = codeObj.getString("errcode") == null ? "" : codeObj.getString("errcode");
|
|
|
+ String errMsg = codeObj.getString("errmsg") == null ? "" : codeObj.getString("errmsg");
|
|
|
+
|
|
|
+ throw new WFMessageServiceException("获取泛微code异常: " + errMsg + "(" + errCode + ")");
|
|
|
+ }
|
|
|
+ token = tokenObj.getString("accessToken");
|
|
|
+
|
|
|
+ return token;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param url
|
|
|
+ * @param bodyData
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static JSONObject doPostByHttpClient(String url, JSONObject bodyData) {
|
|
|
+ try {
|
|
|
+ Map<String, String> headers = new HashMap();
|
|
|
+ headers.put("Content-Type", "application/json; charset=utf-8");
|
|
|
+ headers.put("Accept", "application/json");
|
|
|
+ logger.info(String.format("url[%s],data[%s]", url, bodyData.toJSONString()));
|
|
|
+ System.out.println(String.format("url[%s],data[%s]", url, bodyData.toJSONString()));
|
|
|
+
|
|
|
+ String responseEntify = HttpUtils.postjson(url, headers, bodyData.toJSONString());
|
|
|
+ JSONObject result = (JSONObject)JSONObject.parse(responseEntify);
|
|
|
+ return result;
|
|
|
+ } catch (IOException var5) {
|
|
|
+ throw new KDException(var5, WFErrorCode.httpRequestException(), new Object[]{var5.getMessage()});
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|