From 3012744a045a8df8ce7960027db30617140fc79d Mon Sep 17 00:00:00 2001 From: pan-houxiang <2663608154@qq.com> Date: Mon, 22 Dec 2025 10:37:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B6=E4=BB=96=E5=85=A5=E5=BA=93=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=8D=95=E8=B0=83FW=5F=E8=8E=B7=E5=8F=96=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E6=B5=81=E8=BD=AC=E6=95=B0=E6=8D=AE=EF=BC=88OtherInAp?= =?UTF-8?q?plyWorkflowDataListPlugin=EF=BC=89=20=E7=89=A9=E6=96=99?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E5=8D=95=E6=92=A4=E5=9B=9E=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=EF=BC=88MaterialUnsubmitOp=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OtherInApplyWorkflowDataListPlugin.java | 18 ++- .../operate/sys/MaterialUnsubmitOp.java | 130 +++++++++++------- .../app/plugin/utils/FWRestfulUtils.java | 86 +++++++++++- 3 files changed, 169 insertions(+), 65 deletions(-) diff --git a/lc123/cloud/app/plugin/form/result/OtherInApplyWorkflowDataListPlugin.java b/lc123/cloud/app/plugin/form/result/OtherInApplyWorkflowDataListPlugin.java index 6752850..755dff6 100644 --- a/lc123/cloud/app/plugin/form/result/OtherInApplyWorkflowDataListPlugin.java +++ b/lc123/cloud/app/plugin/form/result/OtherInApplyWorkflowDataListPlugin.java @@ -53,11 +53,11 @@ public class OtherInApplyWorkflowDataListPlugin extends AbstractListPlugin imple "id,billno,tqq9_fwrequestid,tqq9_fwstate,tqq9_auditor,tqq9_auditornode", new QFilter[]{f}); for (DynamicObject tqq9_otherinapply : billArr) { String billno = tqq9_otherinapply.getString("billno"); - log.info("billno:"+billno); + log.info("billno:" + billno); String tqq9_fwrequestid = tqq9_otherinapply.getString("tqq9_fwrequestid"); String tqq9_fwstate = tqq9_otherinapply.getString("tqq9_fwstate"); - if(StringUtils.isNotBlank(tqq9_fwrequestid) && "B".equals(tqq9_fwstate)){ - if(StringUtils.isBlank(userid)){ + if (StringUtils.isNotBlank(tqq9_fwrequestid) && "B".equals(tqq9_fwstate)) { + if (StringUtils.isBlank(userid)) { //获取当前用户id对应的泛微用户ID Long id = RequestContext.get().getCurrUserId(); QFilter f1 = new QFilter("id", "=", id); @@ -67,15 +67,15 @@ public class OtherInApplyWorkflowDataListPlugin extends AbstractListPlugin imple userid = bos_user.getString("entryentity.tqq9_fwuserid"); } if (StringUtils.isBlank(userid)) { - log.info("没有获取到泛微用户ID,当前用户ID:"+id); + log.info("没有获取到泛微用户ID,当前用户ID:" + id); return; } } String requestName = "FW_获取流程流转数据"; //调用泛微接口获取下一步处理人 - String bodyString = FWRestfulUtils.getFwWorkFlowInfo(requestName, billno, tqq9_fwrequestid, userid); - log.info("billno:"+billno+",bodyString:"+bodyString); + String bodyString = FWRestfulUtils.getRequest(requestName, billno, tqq9_fwrequestid, userid); + log.info("billno:" + billno + ",bodyString:" + bodyString); JSONObject map = JSONObject.parseObject(bodyString); if (map != null) { JSONArray data = map.getJSONArray("data");//节点id @@ -102,11 +102,9 @@ public class OtherInApplyWorkflowDataListPlugin extends AbstractListPlugin imple SaveServiceHelper.save(new DynamicObject[]{tqq9_otherinapply}); } } - } } - - + } + } } - } } diff --git a/lc123/cloud/app/plugin/operate/sys/MaterialUnsubmitOp.java b/lc123/cloud/app/plugin/operate/sys/MaterialUnsubmitOp.java index ffe4701..48c5cdc 100644 --- a/lc123/cloud/app/plugin/operate/sys/MaterialUnsubmitOp.java +++ b/lc123/cloud/app/plugin/operate/sys/MaterialUnsubmitOp.java @@ -1,66 +1,98 @@ package tqq9.lc123.cloud.app.plugin.operate.sys; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import com.alibaba.fastjson.JSONObject; +import kd.bos.context.RequestContext; +import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.args.AfterOperationArgs; +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.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; import kd.sdk.plugin.Plugin; +import oadd.com.google.gson.Gson; +import oadd.com.google.gson.JsonObject; +import oadd.org.apache.commons.lang3.StringUtils; +import tqq9.lc123.cloud.app.eip.iscb.LCLogService; +import tqq9.lc123.cloud.app.eip.iscb.impl.LCLogServiceImpl; +import tqq9.lc123.cloud.app.plugin.utils.ConfigUtils; +import tqq9.lc123.cloud.app.plugin.utils.FWRestfulUtils; +import tqq9.lc123.cloud.app.plugin.utils.HttpRequestUtils; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; /** * 单据操作插件 * 物料撤销 调用流程撤回 接口 + * 获取上一个审批人的 fwuserid (添加上一个审批人字段) */ public class MaterialUnsubmitOp extends AbstractOperationServicePlugIn implements Plugin { -// private static final Log logger = LogFactory.getLog(MaterialUnsubmitOp.class); -// final static String KEY_OPKEY = "unsubmit"; -// private static String WL_UnSubmit_URL; -// -// static { -// DynamicObject url = BusinessDataServiceHelper.loadSingle("tqq9_thirdconfig", "name", -// new QFilter[]{new QFilter("number", QCP.equals, "WL_UnSubmit_URL")}); -// WL_UnSubmit_URL = url != null ? url.getString("name") : null; -// } + + private static final Log logger = LogFactory.getLog(MaterialUnsubmitOp.class); + final static String KEY_OPKEY = "unsubmit"; + private static final String FW_appid = ConfigUtils.getThirdConfigByNumber("FW_appid");//FW_appid + private static final String WL_UnSubmit_URL = "api/workflow/paService/withdrawRequest"; @Override public void afterExecuteOperationTransaction(AfterOperationArgs e) { super.afterExecuteOperationTransaction(e); -// LCLogService lcLogService = new LCLogServiceImpl(); -// String operationKey = e.getOperationKey(); -// if (StringUtils.equals(operationKey, KEY_OPKEY)) { -// //获取选中的物料单据数据 -// DynamicObject[] dataEntities = e.getDataEntities(); -// for (DynamicObject material : dataEntities) { -// String id = String.valueOf(material.getLong("id")); -// // 创建HttpClient实例 -// try (CloseableHttpClient httpClient = HttpClients.createDefault()) { -// // 创建PUT请求 -// HttpPut httpPut = new HttpPut(WL_UnSubmit_URL); -// // 设置请求体 -// StringEntity entity1 = new StringEntity("0", ContentType.APPLICATION_JSON); -// StringEntity entity2 = new StringEntity(id, ContentType.APPLICATION_JSON); -// httpPut.setEntity(entity1); -// httpPut.setEntity(entity2); -// // 执行请求并处理响应 -// try (CloseableHttpResponse response = httpClient.execute(httpPut)) { -// int statusCode = response.getStatusLine().getStatusCode(); -// HttpEntity responseEntity = response.getEntity(); -// -// if (responseEntity == null) { -// throw new IOException("Empty response entity"); -// } -// -// String responseBody = EntityUtils.toString(responseEntity, StandardCharsets.UTF_8); -// logger.debug("Response status: {}, Body: {}", statusCode, responseBody); -// -// if (statusCode < 200 || statusCode >= 300) { -// throw new IOException("HTTP request failed with status code: " + statusCode + "\n" + "HTTP request failed responseBody: " + responseBody); -// } -// } -// -// } catch (IOException ex) { -// lcLogService.savelog("FW_流程实例:流程撤回", WL_UnSubmit_URL, false, false, id.toString(), "接口调用报错,errormessage:" + ex.getMessage()); -// throw new RuntimeException(ex + "FW_流程实例:流程撤回失败" ); -// } -// } -// -// } + LCLogService lcLogService = new LCLogServiceImpl(); + String operationKey = e.getOperationKey(); + if (StringUtils.equals(operationKey, KEY_OPKEY)) { + String isremind = "0";//0:不提醒 + DynamicObject[] dataEntities = e.getDataEntities(); + for (DynamicObject material : dataEntities) { + material = BusinessDataServiceHelper.loadSingle(material.getPkValue(), material.getDynamicObjectType().getName()); + String number = material.getString("number"); + String requestId = null; + String tqq9_fwstate = material.getString("tqq9_fwstate"); + String tqq9_fwupdid = material.getString("tqq9_fwupdid");//泛微修改流程ID + if (StringUtils.isNotBlank(tqq9_fwupdid)) { + requestId = tqq9_fwupdid; + } else { + requestId = material.getString("tqq9_fwrequestid");//泛微流程ID + } + if (StringUtils.isNotBlank(requestId) && "待审核".equals(tqq9_fwstate)) { + String userid = null; + String requestName = "FW—流程撤回"; + //获取当前用户id对应的泛微用户ID + //Long id = RequestContext.get().getCurrUserId(); + //获取创建人id对应的泛微用户ID + DynamicObject creator = material.getDynamicObject("creator"); + Long id = creator.getLong("id"); + QFilter f1 = new QFilter("id", "=", id); + QFilter f2 = new QFilter("entryentity.ispartjob", "=", false); + DynamicObject bos_user = QueryServiceHelper.queryOne("bos_user", "id,entryentity.tqq9_fwuserid", new QFilter[]{f1, f2}); + if (bos_user != null) { + userid = bos_user.getString("entryentity.tqq9_fwuserid"); + } + if (org.apache.commons.lang3.StringUtils.isBlank(userid)) { + logger.info("没有获取到泛微用户ID,当前用户ID:" + id); + return; + } + String bodyString = FWRestfulUtils.postRequest(requestName, number, isremind, requestId, userid, WL_UnSubmit_URL); + logger.info("number:" + number + ",bodyString:" + bodyString); + JSONObject map = JSONObject.parseObject(bodyString); + if (map != null && map.size() > 0) { + String code = map.getString("code"); + if ("SUCCESS".equals(code)) { + logger.info("number:" + number + "流程撤回成功"); + } else { + logger.info("number:" + number + "流程撤回失败"); + } + }else{ + logger.info("number:" + number + "流程撤回失败"); + } + } + } + } } } \ No newline at end of file diff --git a/lc123/cloud/app/plugin/utils/FWRestfulUtils.java b/lc123/cloud/app/plugin/utils/FWRestfulUtils.java index 9c6cc4e..9014e11 100644 --- a/lc123/cloud/app/plugin/utils/FWRestfulUtils.java +++ b/lc123/cloud/app/plugin/utils/FWRestfulUtils.java @@ -287,7 +287,7 @@ public class FWRestfulUtils { * @param billno * @return */ - public static String getFwWorkFlowInfo(String requestName,String billno, String requestId, String userId){ + public static String getRequest(String requestName,String billno, String requestId, String userId){ Map registMap = regist(); if(registMap != null && registMap.size() > 0){ String spk = StrUtil.nullToEmpty((String) registMap.get("spk")); @@ -308,7 +308,7 @@ public class FWRestfulUtils { urlBuilder.append("?requestId=").append(requestId); // 手动拼接参数 // list.add(new BasicNameValuePair("requestId", requestId)); - HttpGet httpGet = new HttpGet(urlBuilder.toString()); + HttpGet httpRequest = new HttpGet(urlBuilder.toString()); // HttpPost httpPost = new HttpPost(url); @@ -332,11 +332,85 @@ public class FWRestfulUtils { try{ // httpGet.addHeader("requestId", list.toString()); - httpGet.addHeader("appid",FW_appid); - httpGet.addHeader("token",token); - httpGet.addHeader("userid",encryptUserid); + httpRequest.addHeader("appid",FW_appid); + httpRequest.addHeader("token",token); + httpRequest.addHeader("userid",encryptUserid); // httpPost.setEntity(new UrlEncodedFormEntity(list, "UTF-8")); - response = httpClient.execute(httpGet); + response = httpClient.execute(httpRequest); + if (response != null && response.getEntity() != null) { + //返回信息 + String resulString = EntityUtils.toString(response.getEntity()); + pushlog.set("tqq9_returnstring_tag", resulString); + System.out.println("成功"+ resulString); + OperationServiceHelper.executeOperate("save", "tqq9_fwpushlog", new DynamicObject[]{pushlog}, OperateOption.create()); + return resulString; + }else{ + pushlog.set("tqq9_returnstring_tag", response.toString()); + OperationServiceHelper.executeOperate("save", "tqq9_fwpushlog", new DynamicObject[]{pushlog}, OperateOption.create()); + System.out.println("获取数据失败,请查看日志"+currentDate+" "+currentTime); + } + }catch (Exception e){ + System.out.println("请求失败"+currentDate+" "+currentTime+"====errormsg:"+e.getMessage()); + } + } + } + } + return null; + } + + + public static String postRequest(String requestName,String billno,String isremind , String requestId, String userId, String URL){ + Map registMap = regist(); + if(registMap != null && registMap.size() > 0){ + String spk = StrUtil.nullToEmpty((String) registMap.get("spk")); + String secrit = StrUtil.nullToEmpty((String) registMap.get("secrit")); + if(StringUtils.isNotBlank(spk) && StringUtils.isNotBlank(secrit)){ + String token = getoken(spk, secrit); + if(StringUtils.isNotBlank(token)){ + CloseableHttpResponse response;// 响应类, + CloseableHttpClient httpClient = HttpClients.createDefault(); + + //装填参数 + List list = new ArrayList<>(); + list.add(new BasicNameValuePair("requestId", requestId)); + list.add(new BasicNameValuePair("isremind", isremind)); + + //restful接口url +// String url = FW_Main_URL + "api/workflow/paService/submitRequest"; + String url = FW_Main_URL + URL; +// StringBuilder urlBuilder = new StringBuilder(url); +// urlBuilder.append("?requestId=").append(requestId); // 手动拼接参数 +// list.add(new BasicNameValuePair("requestId", requestId)); + + HttpPost httpRequest = new HttpPost(url); +// HttpPost httpPost = new HttpPost(url); + + + //当前日期 + String currentDate = getCurrentDate(); + //当前时间 + String currentTime = getCurrentTime(); + //封装请求头参数 + RSA rsa = new RSA(null,spk); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64(userId, CharsetUtil.CHARSET_UTF_8, KeyType.PublicKey); + + DynamicObject pushlog = BusinessDataServiceHelper.newDynamicObject("tqq9_fwpushlog"); + pushlog.set("name", requestName); + pushlog.set("tqq9_billno", billno); + pushlog.set("tqq9_url", url); + pushlog.set("tqq9_header_tag", "appid:"+FW_appid+";token:"+token+";userid:"+encryptUserid); + pushlog.set("tqq9_body_tag", JSON.toJSONString(list)); + pushlog.set("enable", "1"); + pushlog.set("status", "C"); + + try{ +// httpGet.addHeader("requestId", list.toString()); + httpRequest.addHeader("appid",FW_appid); + httpRequest.addHeader("token",token); + httpRequest.addHeader("userid",encryptUserid); + httpRequest.setEntity(new UrlEncodedFormEntity(list, "UTF-8")); + response = httpClient.execute(httpRequest); if (response != null && response.getEntity() != null) { //返回信息 String resulString = EntityUtils.toString(response.getEntity());