提交人:邹江涛

提交时间:2025年12月19日
提交内容:待办已办推送调整为手机号认证;补推
This commit is contained in:
root 2025-12-19 17:51:14 +08:00
parent 54627d74ae
commit 4c6244d80f
3 changed files with 251 additions and 30 deletions

View File

@ -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<DynamicObject> 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<DynamicObject> 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<DynamicObject> 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;
}
}
}

View File

@ -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<String, Object> 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<String, Object> 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"));
}
}

View File

@ -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<Object, DynamicObject> 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<Map.Entry<Object, DynamicObject>> iterator = objectDynamicObjectMap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Object, DynamicObject> 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;
}
}