From 4c6244d80f37bbf7889d3e14b6612b4ef480edcc Mon Sep 17 00:00:00 2001 From: root Date: Fri, 19 Dec 2025 17:51:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=82=B9?= =?UTF-8?q?=E6=B1=9F=E6=B6=9B=20=E6=8F=90=E4=BA=A4=E6=97=B6=E9=97=B4?= =?UTF-8?q?=EF=BC=9A2025=E5=B9=B412=E6=9C=8819=E6=97=A5=20=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E5=86=85=E5=AE=B9=EF=BC=9A=E5=BE=85=E5=8A=9E=E5=B7=B2?= =?UTF-8?q?=E5=8A=9E=E6=8E=A8=E9=80=81=E8=B0=83=E6=95=B4=E4=B8=BA=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E8=AE=A4=E8=AF=81=EF=BC=9B=E8=A1=A5=E6=8E=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../opplugin/BacklogPushOPPlugin.java | 123 ++++++++++++++++++ .../servicehandler/BacklogServiceHandle.java | 69 +++++----- .../utils/MobToDoServiceHelper.java | 89 +++++++++++++ 3 files changed, 251 insertions(+), 30 deletions(-) create mode 100644 sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/opplugin/BacklogPushOPPlugin.java create mode 100644 sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/MobToDoServiceHelper.java diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/opplugin/BacklogPushOPPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/opplugin/BacklogPushOPPlugin.java new file mode 100644 index 0000000..d1ca26a --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/opplugin/BacklogPushOPPlugin.java @@ -0,0 +1,123 @@ +package shkd.sys.sys.midservice.opplugin; + + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.entity.validate.AbstractValidator; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import org.apache.commons.lang3.StringUtils; +import shkd.sys.sys.midservice.handler.CreateToDoHandler; +import shkd.sys.sys.midservice.handler.DealToDoHandler; +import shkd.sys.sys.midservice.handler.deleteToDoHandler; + +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; + +/*** + * push-backlog + */ +public class BacklogPushOPPlugin extends AbstractOperationServicePlugIn { + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("shkd_traceid"); + e.getFieldKeys().add("shkd_username"); + e.getFieldKeys().add("shkd_number"); + e.getFieldKeys().add("shkd_status"); + e.getFieldKeys().add("shkd_request"); + e.getFieldKeys().add("shkd_request_tag"); + e.getFieldKeys().add("shkd_response"); + e.getFieldKeys().add("shkd_url"); + e.getFieldKeys().add("shkd_ispush"); + } + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.addValidator(new AbstractValidator() { + @Override + public void validate() { + ExtendedDataEntity[] dataEntities1 = this.getDataEntities(); + Set shkdIspush = Arrays.stream(dataEntities1).filter(e1 -> e1.getDataEntity() != null) + .map(e1 -> e1.getDataEntity()) + .filter(e1 -> e1.getBoolean("shkd_ispush")).collect(Collectors.toSet()); + if(shkdIspush.size() > 0){ + this.addErrorMessage(dataEntities1[0],"选中的数据中包含补推成功的数据,请手动过滤一下"); + } + Set shkdResponse = Arrays.stream(dataEntities1).filter(e1 -> e1.getDataEntity() != null) + .map(e1 -> e1.getDataEntity()) + .filter(e1 -> "true".equals(e1.getString("shkd_response"))).collect(Collectors.toSet()); + if(shkdResponse.size() > 0){ + this.addErrorMessage(dataEntities1[0],"选中的数据中包含推送成功的数据,请手动过滤一下"); + } + Set shkdUrl = Arrays.stream(dataEntities1).filter(e1 -> e1.getDataEntity() != null) + .map(e1 -> e1.getDataEntity()) + .filter(e1 -> StringUtils.isEmpty(e1.getString("shkd_url"))).collect(Collectors.toSet()); + if(shkdUrl.size() > 0){ + this.addErrorMessage(dataEntities1[0],"选中的数据url为空,请手动补充一下,推送旧eoss、url有值即可,推送新eoss,url中需要包含新eoss"); + } + } + }); + } + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + DynamicObject[] dataEntities1 = e.getDataEntities(); + for (DynamicObject dynamicObject : dataEntities1) { + String shkdUrl = dynamicObject.getString("shkd_url"); + String type = dynamicObject.getString("shkd_status"); + String userName = dynamicObject.getString("shkd_username"); + String shkd_traceid = dynamicObject.getString("shkd_traceid"); + String data_json = dynamicObject.getString("shkd_request_tag"); + String title = dynamicObject.getString("shkd_request"); + String fbillno = dynamicObject.getString("shkd_number"); + if ("新eoss".equals(shkdUrl)) { + new_push(title,data_json,shkd_traceid,userName,fbillno,type); + }else{ + old_push(title,data_json,shkd_traceid,userName,fbillno,type); + } + dynamicObject.set("shkd_ispush",true); + } + SaveServiceHelper.save(dataEntities1); + } + public void old_push(String title,String data_json,String shkd_traceid, String userName,String fbillno,String type){ + switch (type){ + case "0": + CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(data_json,title,shkd_traceid,userName,fbillno); + break; + case "2": + DealToDoHandler.get_DealToDoHandler().sendDealToDo(Long.valueOf(shkd_traceid),userName,fbillno); + case "5": + deleteToDoHandler.get_deleteToDoHandler().sendDeleteToDo(Long.valueOf(shkd_traceid),userName,fbillno); + break; + default: + break; + } + } + + public void new_push(String title,String data_json,String shkd_traceid, String userName,String fbillno,String type){ + switch (type){ + case "0": + CreateToDoHandler.get_CreateToDoHandler().sendCreateToDoNew(data_json,title,shkd_traceid,userName,fbillno); + break; + case "2": + DealToDoHandler.get_DealToDoHandler().sendDealToDoNew(Long.valueOf(shkd_traceid),userName,fbillno); + case "5": + deleteToDoHandler.get_deleteToDoHandler().sendDeleteToDoNew(Long.valueOf(shkd_traceid),userName,fbillno); + break; + default: + break; + } + } + +} + + + diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java index 31b3810..96484b7 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java @@ -23,6 +23,7 @@ import shkd.sys.sys.midservice.handler.CreateToDoHandler; import shkd.sys.sys.midservice.handler.DealToDoHandler; import shkd.sys.sys.midservice.handler.deleteToDoHandler; import shkd.sys.sys.midservice.utils.GetUrlUtils; +import shkd.sys.sys.midservice.utils.MobToDoServiceHelper; import shkd.sys.sys.utils.AesUtils; import java.util.Iterator; @@ -31,6 +32,7 @@ import java.util.Map; import java.util.Objects; import static shkd.sys.sys.midservice.utils.MobApproveListServiceHelper.allowMobApprove; +import static shkd.sys.sys.midservice.utils.MobToDoServiceHelper.allowMobTodo; /** * @Author: FangShiXiao @@ -175,7 +177,8 @@ public class BacklogServiceHandle extends AbstractServiceHandler { //接收人手机号 DynamicObject dynamicObject = QueryServiceHelper.queryOne("bos_user", "number,name," + "phone,username", new QFilter[]{new QFilter("id", "=", next.getString("freceiveuserid"))}); - String userName1 = dynamicObject.getString("username"); + String phone = dynamicObject.getString("phone"); +// String receiveUsersysName = dynamicObject.getString("username"); String userName; try { userName = AesUtils.aesEncryptString(dynamicObject.getString("username")); @@ -220,10 +223,10 @@ public class BacklogServiceHandle extends AbstractServiceHandler { form.append("\"").append(next.getString("fname")).append("\","); form.append("\"sendUserName\":"); form.append("\"").append(next.getString("fstartname")).append("\","); - form.append("\"receiveUsersysName\":"); - form.append("\"").append(userName1).append("\","); +// form.append("\"receiveUsersysName\":"); +// form.append("\"").append(receiveUsersysName).append("\","); form.append("\"receiveUserId\":"); - form.append("\"").append(userName1).append("\","); + form.append("\"").append(phone).append("\","); form.append("\"handleUrl\":"); form.append("\"").append(pcUrl).append("&userName=").append(userName).append("\","); form.append("\"appHandleUrl\":"); @@ -248,9 +251,9 @@ public class BacklogServiceHandle extends AbstractServiceHandler { logger.info("###shkd_type参数为"+shkd_type); if (Objects.equals(shkd_type, "0")) { //旧 eoss 环境 待办 - CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(), title, next.getLong("fid").toString(), userName1, next.getString("fbillno")); + CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(), title, next.getLong("fid").toString(), phone, next.getString("fbillno")); //旧 eoss 环境 已办 - DealToDoHandler.get_DealToDoHandler().sendDealToDo(next.getLong("fid"), userName1, next.getString("fbillno")); + DealToDoHandler.get_DealToDoHandler().sendDealToDo(next.getLong("fid"), phone, next.getString("fbillno")); if (ObjectUtils.isEmpty(shkd_cache)) { z = 604800; } else { @@ -260,9 +263,9 @@ public class BacklogServiceHandle extends AbstractServiceHandler { } else if (Objects.equals(shkd_type, "1")) { String replace = form.toString().replace("&ado=view", "&ado=view&isNew=true"); //新 eoss 环境 待办 - CreateToDoHandler.get_CreateToDoHandler().sendCreateToDoNew(replace, title, next.getLong("fid").toString(), userName1, next.getString("fbillno")); + CreateToDoHandler.get_CreateToDoHandler().sendCreateToDoNew(replace, title, next.getLong("fid").toString(), phone, next.getString("fbillno")); //新 eoss 环境 已办 - DealToDoHandler.get_DealToDoHandler().sendDealToDoNew(next.getLong("fid"), userName1, next.getString("fbillno")); + DealToDoHandler.get_DealToDoHandler().sendDealToDoNew(next.getLong("fid"), phone, next.getString("fbillno")); if (ObjectUtils.isEmpty(shkd_cache)) { z = 604800; } else { @@ -272,11 +275,11 @@ public class BacklogServiceHandle extends AbstractServiceHandler { } else if (Objects.equals(shkd_type, "2")) { String replace = form.toString().replace("&ado=view", "&ado=view&isNew=true"); //二套环境 待办 - CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(), title, next.getLong("fid").toString(), userName1, next.getString("fbillno")); - CreateToDoHandler.get_CreateToDoHandler().sendCreateToDoNew(replace, title, next.getLong("fid").toString(), userName1, next.getString("fbillno")); + CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(), title, next.getLong("fid").toString(), phone, next.getString("fbillno")); + CreateToDoHandler.get_CreateToDoHandler().sendCreateToDoNew(replace, title, next.getLong("fid").toString(), phone, next.getString("fbillno")); //二套环境 已办 - DealToDoHandler.get_DealToDoHandler().sendDealToDo(next.getLong("fid"), userName1, next.getString("fbillno")); - DealToDoHandler.get_DealToDoHandler().sendDealToDoNew(next.getLong("fid"), userName1, next.getString("fbillno")); + DealToDoHandler.get_DealToDoHandler().sendDealToDo(next.getLong("fid"), phone, next.getString("fbillno")); + DealToDoHandler.get_DealToDoHandler().sendDealToDoNew(next.getLong("fid"), phone, next.getString("fbillno")); if (ObjectUtils.isEmpty(shkd_cache)) { z = 604800; } else { @@ -374,20 +377,23 @@ public class BacklogServiceHandle extends AbstractServiceHandler { form.append("\"").append(dynamicObject.getString("name")).append("\","); form.append("\"sendUserName\":"); form.append("\"").append(dynamicObject.getString("startname")).append("\","); - form.append("\"receiveUsersysName\":"); - form.append("\"").append(query_one.getString("username")).append("\","); +// form.append("\"receiveUsersysName\":"); +// form.append("\"").append(query_one.getString("username")).append("\","); form.append("\"receiveUserId\":"); - form.append("\"").append(query_one.getString("username")).append("\","); + form.append("\"").append(query_one.getString("phone")).append("\","); form.append("\"handleUrl\":"); Map taskInfo = GetUrlUtils.getTaskInfo(todoInfo.getTaskId()); String pc_url = GetUrlUtils.buildTaskUrl(taskInfo); String app_url = GetUrlUtils.buildAppTaskUrl(taskInfo); form.append("\"").append(pc_url).append("&userName=").append(userName).append("\","); - form.append("\"appHandleUrl\":"); - form.append("\"").append(app_url).append("&userName=").append(userName).append("\","); - // appUrl移动端查看模式 - form.append("\"appViewUrl\":"); - form.append("\"").append(app_url).append("&userName=").append(userName).append("&ado=view").append("\","); + boolean b = allowMobTodo(ctx, todoInfo); + if (!b) { + form.append("\"appHandleUrl\":"); + form.append("\"").append(app_url).append("&userName=").append(userName).append("\","); + // appUrl移动端查看模式 + form.append("\"appViewUrl\":"); + form.append("\"").append(app_url).append("&userName=").append(userName).append("&ado=view").append("\","); + } form.append("\"appName\":"); form.append("\"").append(ctx.getEntityName()).append("\","); //pc端查看模式 @@ -400,7 +406,7 @@ public class BacklogServiceHandle extends AbstractServiceHandler { form.append("}"); logger.info("###待办拼接请求体:" + form); CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(), todoInfo.getTitle(), - todoInfo.getTaskId().toString(), query_one.getString("username"), dynamicObject.getString("billno")); + todoInfo.getTaskId().toString(), query_one.getString("phone"), dynamicObject.getString("billno")); } } @@ -439,20 +445,23 @@ public class BacklogServiceHandle extends AbstractServiceHandler { form.append("\"").append(dynamicObject.getString("name")).append("\","); form.append("\"sendUserName\":"); form.append("\"").append(dynamicObject.getString("startname")).append("\","); - form.append("\"receiveUsersysName\":"); - form.append("\"").append(query_one.getString("username")).append("\","); +// form.append("\"receiveUsersysName\":"); +// form.append("\"").append(query_one.getString("username")).append("\","); form.append("\"receiveUserId\":"); - form.append("\"").append(query_one.getString("username")).append("\","); + form.append("\"").append(query_one.getString("phone")).append("\","); form.append("\"handleUrl\":"); Map taskInfo = GetUrlUtils.getTaskInfo(todoInfo.getTaskId()); String pc_url = GetUrlUtils.buildTaskUrl(taskInfo); String app_url = GetUrlUtils.buildAppTaskUrl(taskInfo); form.append("\"").append(pc_url).append("&isNew=true&userName=").append(userName).append("\","); - form.append("\"appHandleUrl\":"); - form.append("\"").append(app_url).append("&isNew=true&userName=").append(userName).append("\","); - // appUrl移动端查看模式 - form.append("\"appViewUrl\":"); - form.append("\"").append(app_url).append("&isNew=true&userName=").append(userName).append("&ado=view").append("\","); + boolean b = allowMobTodo(ctx, todoInfo); + if (!b) { + form.append("\"appHandleUrl\":"); + form.append("\"").append(app_url).append("&isNew=true&userName=").append(userName).append("\","); + // appUrl移动端查看模式 + form.append("\"appViewUrl\":"); + form.append("\"").append(app_url).append("&isNew=true&userName=").append(userName).append("&ado=view").append("\","); + } form.append("\"appName\":"); form.append("\"").append(ctx.getEntityName()).append("\","); //pc端查看模式 @@ -465,7 +474,7 @@ public class BacklogServiceHandle extends AbstractServiceHandler { form.append("}"); logger.info("###推送新EOSS待办拼接请求体:" + form); CreateToDoHandler.get_CreateToDoHandler().sendCreateToDoNew(form.toString(), todoInfo.getTitle(), - todoInfo.getTaskId().toString(), query_one.getString("username"), dynamicObject.getString("billno")); + todoInfo.getTaskId().toString(), query_one.getString("phone"), dynamicObject.getString("billno")); } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/MobToDoServiceHelper.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/MobToDoServiceHelper.java new file mode 100644 index 0000000..b3e68b3 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/MobToDoServiceHelper.java @@ -0,0 +1,89 @@ +package shkd.sys.sys.midservice.utils; + +import com.bes.admin.jeemx.util.ObjectUtil; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.workflow.engine.msg.ctx.MessageContext; +import kd.bos.workflow.engine.msg.info.ToDoInfo; + +import java.util.Iterator; +import java.util.Map; + +/** + * @Author 方世筱 + * @Date 2025/6/20 0020 13:46 + * @Version 1.0 + */ +public class MobToDoServiceHelper { + public static boolean allowMobTodo(String entityNumber,String billType,String procDefNumber,String nodeKey){ + QFilter[] qFilters = new QFilter[]{ + //实体编码=传入参数 + //生效 + new QFilter("shkd_entitynumber","=",entityNumber), + new QFilter("shkd_enable","=",true) + }; + Map objectDynamicObjectMap = BusinessDataServiceHelper.loadFromCache( + "shkd_mob_todo", "id,shkd_nolimitbilltype,shkd_nolimitprocess," + + "shkd_nolimitnode,shkd_billtype,shkd_processnum,shkd_nodenum", qFilters); + if(objectDynamicObjectMap != null && objectDynamicObjectMap.size()>0){ + Iterator> iterator = objectDynamicObjectMap.entrySet().iterator(); + while(iterator.hasNext()){ + Map.Entry next = iterator.next(); + DynamicObject config = next.getValue(); + //限定单据类型且不一致 + if(!config.getBoolean("shkd_nolimitbilltype") && !ObjectUtil.equals(billType,config.getString("shkd_billtype"))){ + continue; + } + //限定流程且不一致 + if(!config.getBoolean("shkd_nolimitprocess") && !ObjectUtil.equals(procDefNumber,config.getString("shkd_processnum"))){ + continue; + } + //限定节点且不一致 + if(!config.getBoolean("shkd_nolimitnode") && !ObjectUtil.equals(nodeKey,config.getString("shkd_nodenum"))){ + continue; + } + //符合条件 + return true; + } + } + + return false; + } + + public static boolean allowMobTodo(MessageContext ctx, ToDoInfo todoInfo){ + String entityNumber=ctx.getEntityNumber(); + String billType = ""; + DynamicObject object = BusinessDataServiceHelper.loadSingleFromCache("wf_hitaskinst", "entityname", + new QFilter[]{new QFilter("id", "=", todoInfo.getTaskId())}); + if(object != null){ + billType = object.getString("entityname"); + } + String elementId = ctx.getElementId(); + int i = elementId.lastIndexOf("_"); + //流程 + String procDefNumber = elementId.substring(0, i); + //节点 + String nodeKey = elementId.substring(i + 1); + return allowMobTodo(entityNumber,billType,procDefNumber,nodeKey); + } + + public static boolean allowMobTodo(Object taskId){ + DynamicObject object = BusinessDataServiceHelper.loadSingleFromCache("wf_hitaskinst", + "entitynumber,entityname,taskdefinitionkey", + new QFilter[]{new QFilter("id", "=", taskId)}); + if(object != null){ + String entityNumber = object.getString("entitynumber"); + String billType = object.getString("entityname"); + String elementId = object.getString("taskdefinitionkey"); + int i = elementId.lastIndexOf("_"); + //流程 + String procDefNumber = elementId.substring(0, i); + //节点 + String nodeKey = elementId.substring(i + 1); + + return allowMobTodo(entityNumber,billType,procDefNumber,nodeKey); + } + return false; + } +}