copyJob与ijob为定时任务补发OA待阅差值人员代码,增加了线程推送

SendOAread代码是为了只推送芦娟和杨文军两人代码
This commit is contained in:
Mr-wang 2023-07-20 10:53:03 +08:00
parent 93c5147b47
commit 24fd1ab36d
3 changed files with 1433 additions and 35 deletions

View File

@ -2,6 +2,7 @@ package com.actionsoft.apps.coe.pal.datamigration;
import com.actionsoft.apps.coe.pal.datamigration.Utils.UtilUrl; import com.actionsoft.apps.coe.pal.datamigration.Utils.UtilUrl;
import com.actionsoft.bpms.bo.engine.BO; import com.actionsoft.bpms.bo.engine.BO;
import com.actionsoft.bpms.bpmn.engine.core.delegate.ProcessExecutionContext;
import com.actionsoft.bpms.bpmn.engine.model.run.delegate.ProcessInstance; import com.actionsoft.bpms.bpmn.engine.model.run.delegate.ProcessInstance;
import com.actionsoft.bpms.bpmn.engine.model.run.delegate.TaskInstance; import com.actionsoft.bpms.bpmn.engine.model.run.delegate.TaskInstance;
import com.actionsoft.bpms.commons.database.RowMap; import com.actionsoft.bpms.commons.database.RowMap;
@ -25,12 +26,13 @@ import org.quartz.JobExecutionException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.LinkedHashMap; import java.util.concurrent.ExecutorService;
import java.util.LinkedList; import java.util.concurrent.Executors;
import java.util.List;
public class CopyJob implements IJob { public class CopyJob implements IJob {
private int sendTotal;
@Override @Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
@ -38,7 +40,7 @@ public class CopyJob implements IJob {
System.err.println("推送OA待阅执行开始====>"); System.err.println("推送OA待阅执行开始====>");
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
ArrayList<String> sendList = new ArrayList<String>(); ArrayList<String> sendList = new ArrayList<String>();
String new_uid = "";
ProcessInstance pc = SDK.getProcessAPI().getInstanceById(cc); ProcessInstance pc = SDK.getProcessAPI().getInstanceById(cc);
BO bo_act_coe_publish1 = SDK.getBOAPI().query("BO_ACT_COE_PUBLISH", true) BO bo_act_coe_publish1 = SDK.getBOAPI().query("BO_ACT_COE_PUBLISH", true)
.addQuery("BINDID=", pc.getId()) .addQuery("BINDID=", pc.getId())
@ -116,17 +118,70 @@ public class CopyJob implements IJob {
*//*}*//* *//*}*//*
}*/ }*/
List<String> list = new LinkedList<>(); ArrayList<String> list = new ArrayList<>();
List<BO> bo_eu_require_data = SDK.getBOAPI().query("BO_EU_REQUIRE_DATA", true).addQuery("PROCESS_ID = ", cc).list(); for (String user_id:sendList){
for(BO bo:bo_eu_require_data){ BO bo_eu_require_data = SDK.getBOAPI().query("BO_EU_HAS_BEEN_SEND", true).addQuery("PROCESS_ID = ", cc).addQuery("USER_ID=",user_id).detail();
String id = bo.getString("USER_ID"); if (bo_eu_require_data!=null){
list.add(id);
}else {
list.add(user_id);
}
} }
System.out.println("新list>>>>>>"+list.size());
for (String user : list) { new_uid = new_uid.join(",", list);
long startTimes = System.currentTimeMillis();
String[] users = new_uid.split(",");
System.out.println("new_uid>>>>>>>>>>>>>>"+users.length);
int length = 100;
int ys = users.length%length;
/**
* 这个是以300人作为一个发送单位去放到list中并发送待阅数据
*/
if (ys==0) {
int size = users.length/length;
int flag = 0;
List<String[]> lists = new LinkedList();
for (int i=0;i<size;i++){
String[] results;
results = Arrays.copyOfRange(users, flag, flag+100);
lists.add(results);
flag = flag+100;
}
/**
* 创建线程发送待阅数据
*/
course(lists,startTime,jsonObject,pc,list);
//System.out.println("发送人员数据>>>>>>>>>>>>>>"+list);
}else {
int size = users.length/length;
int flag = 0;
List<String[]> lists = new LinkedList();
for (int i=0;i<size;i++){
String[] results;
results = Arrays.copyOfRange(users, flag, flag+100);
lists.add(results);
flag = flag+100;
}
String[] redata;
redata = Arrays.copyOfRange(users, flag, flag+ys);
lists.add(redata);
// 创建线程来实现为每300人为一个的线程跑待阅
/**
* 创建线程发送待阅数据
*/
course(lists,startTime,jsonObject,pc,list);
//System.out.println("发送人员数据>>>>>>>>>>>>>>"+list);
}
/*System.out.println("新list>>>>>>"+list.size());
for (String user : lists) {
try { try {
SendOARead(jsonObject, pc, user, "批量推送"); SendOARead(jsonObject, pc, user, "批量推送");
} catch (Exception e) { // TODO: handle exception } catch (Exception e) { // TODO: handle exception
@ -139,7 +194,187 @@ public class CopyJob implements IJob {
// 存入日志 // 存入日志
createReadLog(pc, jsonObject, sendList, startTime, endTimes); createReadLog(pc, jsonObject, sendList, startTime, endTimes);
System.err.println(pc.getTitle() + "推送OA待阅执行完毕====>" + "用时:" System.err.println(pc.getTitle() + "推送OA待阅执行完毕====>" + "用时:"
+ (endTimes - startTime) / 1000 / 60 + "分钟"); + (endTimes - startTime) / 1000 / 60 + "分钟");*/
}
public void course(List<String[]> list, long startTime, JSONObject jsonObject, ProcessInstance processInstance,ArrayList<String> sendList){
// 创建线程来实现为每100人为一个的线程跑待阅
ExecutorService service = Executors.newFixedThreadPool(5);
int m = 0;
for (String[] resrt:list
) {
int finalM = m;
service.execute(new Runnable() {
@Override
public void run() {
System.out.println("最后一个数组是什么>>>>>>>"+Arrays.asList(resrt).size());
try {
SendOARead(jsonObject, processInstance, resrt,"批量推送");
} catch (DocumentException e) {
e.printStackTrace();
}finally {
if (finalM == list.size()-1){
List<RowMap> List = DBSql.getMaps("SELECT NAME FROM BO_EU_READ_COUNT WHERE PROCESSID = '"
+ processInstance.getId() + "' AND RESULT = '待处理'");
if (List.size() != 0) {
System.err.println(processInstance.getTitle() + "批量推送失败后执行二次推送=======>" + List.size());
for (RowMap rowMap : List) {
try {
ArrayList<String> secondUserList = new ArrayList<String>();
secondUserList.add(rowMap.getString("NAME"));
System.err.println(processInstance.getTitle() + "二次推送账号=======>" + secondUserList);
BO executiveTaskBO=SDK.getBOAPI().query("BO_ACT_EXECUTIVE_TASK").addQuery("TASKID=",processInstance.getId()).addQuery("TASKSTATUS=",2).detail();
if(executiveTaskBO!=null){
List<BO> recordFailLists = new ArrayList<BO>();
for(RowMap oneuserId:List){
BO bo = new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("NAME", oneuserId.getString("NAME"));
bo.set("TYPE", "批量推送");
bo.set("RESULT", "待处理");
bo.set("PROCESSID", processInstance.getId());
bo.set("DEPNAME", SDK.getORGAPI().getUser(oneuserId.getString("NAME")).getDepartmentId());
recordFailLists.add(bo);
}
SDK.getBOAPI().create("BO_EU_READ_COUNT", recordFailLists, processInstance.getId(), processInstance.getCreateUser());
return;
}
secondSendOARead(jsonObject, processInstance, secondUserList, "单个账号推送");
} catch (Exception e) { // TODO: handle exception
}
}
}
long endTimes = System.currentTimeMillis();
// 存入日志
createReadLog(processInstance, jsonObject, sendList, startTime, endTimes);
System.err.println(processInstance.getTitle() + "推送OA待阅执行完毕====>" + "用时:"
+ (endTimes - startTime) / 1000 / 60 + "分钟");
//发送消息通知
List<BO> readCountBO=SDK.getBOAPI().query("BO_EU_READ_COUNT").addQuery("PROCESSID=",processInstance.getId()).list();
if(readCountBO.size()>0){
SDK.getNotificationAPI().sendMessage("admin", "admin", "文件名称:"+processInstance.getTitle()+"文件有失败记录,请及时处理!!!");
}
//更新任务状态
int r1 = DBSql.update("UPDATE BO_ACT_EXECUTIVE_TASK SET ISTASKEND='2' WHERE TASKID ='" + processInstance.getId() + "'");
}
}
}
});
m++;
}
}
public void secondSendOARead(JSONObject jsonObject, ProcessInstance processInstance, List<String> idList,String type)
throws DocumentException {
System.out.println("idList========="+idList.toString());
String processInstId = processInstance.getId();
// System.err.println(processInstance.getTitle() + "开始发送:" + userId);
/*
* if ("".equals(userId) || UtilString.isEmpty(userId)) { return; }
*/
if (idList.size() == 0) {
return;
}
String userIds = StringUtils.join(idList, ",");
jsonObject.put("userList", userIds);
String xmlStr = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"webservices.yili.weaver.com.cn\">\n"
+ " <soapenv:Header/>" + " <soapenv:Body>" + " <web:service>" + " <web:in0>"
+ "<![CDATA[" + jsonObject + "]]>" + " </web:in0>" + " </web:service>"
+ " </soapenv:Body>" + "</soapenv:Envelope>";
// System.out.println("xmlStr>>>>>>>>" + xmlStr);
String readurl = SDK.getAppAPI().getProperty("com.awspaas.user.apps.yili.integration", "readurl");
String postSoap = UtilUrl.doPostSoap(readurl, xmlStr, "");
Document document = DocumentHelper.parseText(postSoap);
Element rootElement = document.getRootElement();
Element result = rootElement.element("Body").element("serviceResponse").element("out");
String resultString = result.getData().toString();
JSONObject jsonObject1 = JSON.parseObject(resultString);
System.out.println("jsonObject1==============="+jsonObject1);
String datas = jsonObject1.getString("data");
System.out.println("data================="+datas);
String status = jsonObject1.getString("status");
System.out.println("推送》》》》》》》》》》》" + status);
if ("true".equals(status)) {
JSONArray resultArray = JSONObject.parseArray(datas);
System.out.println(processInstance.getTitle() + "待阅推送成功:" + idList.size()+"");
//批量入库操作
//加入时间戳
if(resultArray.size()>0){
List<BO> recordLists = new ArrayList<BO>();
long startTime2 = System.currentTimeMillis();
for (int j = 0; j < resultArray.size(); j++) {
JSONObject jsonObject2 = resultArray.getJSONObject(j);
String user = jsonObject2.get("user").toString();
String dataid = jsonObject2.get("dataid").toString();
BO bo = new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("PROCESSID", processInstance.getId());
bo.set("USER_ID", user);
bo.set("USERDEP", SDK.getORGAPI().getUser(user).getDepartmentId());
bo.set("DATAID", dataid);
bo.set("RESULT", status);
bo.set("SENDTYPE", "1");
bo.set("READSTATE", "未读");
bo.set("TYPE", type);
recordLists.add(bo);
BO oa_real_time=SDK.getBOAPI().query("BO_ACT_OA_REAL_TIME").addQuery("PROCESSID=",processInstance.getId()).detail();
String sqly = "SELECT ID FROM BO_ACT_DATAID WHERE PROCESSID = '" + processInstId + "' AND SENDTYPE = '1'";
List<RowMap> mapsy = DBSql.getMaps(sqly);
if(oa_real_time!=null){
int r1 = DBSql.update("UPDATE BO_ACT_OA_REAL_TIME SET SENDNUMSJ='" + mapsy.size() + "'WHERE PROCESSID ='" + processInstance.getId() + "'");
}else{
//插入实时更新人数表
BO realTimeBO=new BO();
realTimeBO.set("USREID", user);
realTimeBO.set("DEPID", SDK.getORGAPI().getUser(user).getDepartmentId());
realTimeBO.set("BUNAME",SDK.getORGAPI().getUser(user).getExt4());
realTimeBO.set("TITLE", processInstance.getTitle());
realTimeBO.set("PROCESSID", processInstance.getId());
realTimeBO.set("SENDNUMSJ", 1);
realTimeBO.set("SENDNUM",sendTotal);
SDK.getBOAPI().create("BO_ACT_OA_REAL_TIME", bo, processInstance.getId(), processInstance.getCreateUser());
}
}
SDK.getBOAPI().create("BO_ACT_DATAID",recordLists, processInstance.getId(), processInstance.getCreateUser());
long endTime2 = System.currentTimeMillis();
System.err.println(processInstance.getTitle() + "二次批量插入OA待阅数据====>" + "用时:"
+ (endTime2 - startTime2) / 1000 + "");
}
if("单个账号推送".equals(type)) {
DBSql.update("UPDATE BO_EU_READ_COUNT SET RESULT = '已重新推送' WHERE PROCESSID = '"+processInstId+"' AND NAME = '"+userIds+"'");
}
}
} }
@ -151,7 +386,7 @@ public class CopyJob implements IJob {
* @param processInstance * @param processInstance
* @throws DocumentException * @throws DocumentException
*/ */
public void SendOARead(JSONObject jsonObject, ProcessInstance processInstance, String userIds, String type) /* public void SendOARead(JSONObject jsonObject, ProcessInstance processInstance, String userIds, String type)
throws DocumentException { throws DocumentException {
String processInstId = processInstance.getId(); String processInstId = processInstance.getId();
@ -204,7 +439,7 @@ public class CopyJob implements IJob {
SDK.getBOAPI().create("BO_ACT_DATAID", bo, processInstance.getId(), processInstance.getCreateUser()); SDK.getBOAPI().create("BO_ACT_DATAID", bo, processInstance.getId(), processInstance.getCreateUser());
/*BO oa_real_time = SDK.getBOAPI().query("BO_ACT_OA_REAL_TIME").addQuery("PROCESSID=", processInstance.getId()).detail(); *//*BO oa_real_time = SDK.getBOAPI().query("BO_ACT_OA_REAL_TIME").addQuery("PROCESSID=", processInstance.getId()).detail();
if (oa_real_time != null) { if (oa_real_time != null) {
int r1 = DBSql.update("UPDATE BO_ACT_OA_REAL_TIME SET SENDNUMSJ='" + sucount + "'WHERE PROCESSID ='" + processInstId + "'"); int r1 = DBSql.update("UPDATE BO_ACT_OA_REAL_TIME SET SENDNUMSJ='" + sucount + "'WHERE PROCESSID ='" + processInstId + "'");
} else { } else {
@ -219,7 +454,7 @@ public class CopyJob implements IJob {
SDK.getBOAPI().create("BO_ACT_OA_REAL_TIME", bo, processInstance.getId(), processInstance.getCreateUser()); SDK.getBOAPI().create("BO_ACT_OA_REAL_TIME", bo, processInstance.getId(), processInstance.getCreateUser());
} }
sucount++;*/ sucount++;*//*
} }
if ("单个账号推送".equals(type)) { if ("单个账号推送".equals(type)) {
@ -254,8 +489,168 @@ public class CopyJob implements IJob {
} }
} }
*/
/**
* 发送OA待阅数据
*
* @param jsonObject
* @param processInstance
* @param results
* @throws DocumentException
*/
public void SendOARead(JSONObject jsonObject, ProcessInstance processInstance, String[] resrt,String type)
throws DocumentException {
String userIds = "";
userIds = StringUtils.join(resrt, ",");
String processInstId = processInstance.getId();
// System.err.println(processInstance.getTitle() + "开始发送:" + userId);
/*
* if ("".equals(userId) || UtilString.isEmpty(userId)) { return; }
*/
if (resrt.length == 0) {
return;
}
long start_time = System.currentTimeMillis();
System.out.println("待阅推送开始时间>>>>>>>>>>>>"+start_time);
BO bo_OA_read = new BO();
bo_OA_read.set("FIR_NUMS",resrt.length);
bo_OA_read.set("START_TIME",start_time);
jsonObject.put("userList", userIds);
String xmlStr = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"webservices.yili.weaver.com.cn\">\n"
+ " <soapenv:Header/>" + " <soapenv:Body>" + " <web:service>" + " <web:in0>"
+ "<![CDATA[" + jsonObject + "]]>" + " </web:in0>" + " </web:service>"
+ " </soapenv:Body>" + "</soapenv:Envelope>";
// System.out.println("xmlStr>>>>>>>>" + xmlStr);
String readurl = SDK.getAppAPI().getProperty("com.awspaas.user.apps.yili.integration", "readurl");
String postSoap = UtilUrl.doPostSoap(readurl, xmlStr, "");
Document document = DocumentHelper.parseText(postSoap);
Element rootElement = document.getRootElement();
Element result = rootElement.element("Body").element("serviceResponse").element("out");
String resultString = result.getData().toString();
JSONObject jsonObject1 = JSON.parseObject(resultString);
System.out.println("jsonObject1==============="+jsonObject1);
String datas = jsonObject1.getString("data");
long have_time = System.currentTimeMillis();
System.out.println("接收到返回的待阅ID时间>>>>>>>>>>>>>>>>"+have_time);
bo_OA_read.set("HAVE_TIME",have_time);
System.out.println("接收到返回的待阅耗时时间>>>>>>>>>>>>"+(have_time-start_time));
bo_OA_read.set("SUM_TIME",(have_time-start_time));
System.out.println("data================="+datas);
String status = jsonObject1.getString("status");
System.out.println("推送》》》》》》》》》》》" + status);
if ("true".equals(status)) {
JSONArray resultArray = JSONObject.parseArray(datas);
//System.out.println(processInstance.getTitle() + "待阅推送成功:" + idList.size()+"");
//批量入库操作
//加入时间戳
long set_start_time = System.currentTimeMillis();
bo_OA_read.set("SET_TIME",set_start_time);
if(resultArray.size()>0){
List<BO> recordLists = new ArrayList<BO>();
long startTime2 = System.currentTimeMillis();
for (int j = 0; j < resultArray.size(); j++) {
JSONObject jsonObject2 = resultArray.getJSONObject(j);
String user = jsonObject2.get("user").toString();
String dataid = jsonObject2.get("dataid").toString();
BO bo = new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("PROCESSID", processInstance.getId());
bo.set("USER_ID", user);
//bo.set("USERDEP", SDK.getORGAPI().getUser(user).getDepartmentId());
bo.set("DATAID", dataid);
bo.set("RESULT", status);
bo.set("SENDTYPE", "1");
bo.set("READSTATE", "未读");
bo.set("TYPE", type);
recordLists.add(bo);
BO oa_real_time=SDK.getBOAPI().query("BO_ACT_OA_REAL_TIME").addQuery("PROCESSID=",processInstance.getId()).detail();
String sqly = "SELECT ID FROM BO_ACT_DATAID WHERE PROCESSID = '" + processInstId + "' AND SENDTYPE = '1'";
List<RowMap> mapsy = DBSql.getMaps(sqly);
if(oa_real_time!=null){
int r1 = DBSql.update("UPDATE BO_ACT_OA_REAL_TIME SET SENDNUMSJ='" + mapsy.size() + "'WHERE PROCESSID ='" + processInstance.getId() + "'");
}else{
//插入实时更新人数表
BO realTimeBO=new BO();
realTimeBO.set("USREID", user);
realTimeBO.set("DEPID", SDK.getORGAPI().getUser(user).getDepartmentId());
realTimeBO.set("BUNAME",SDK.getORGAPI().getUser(user).getExt4());
realTimeBO.set("TITLE", processInstance.getTitle());
realTimeBO.set("PROCESSID", processInstance.getId());
realTimeBO.set("SENDNUMSJ", 1);
realTimeBO.set("SENDNUM",sendTotal);
SDK.getBOAPI().create("BO_ACT_OA_REAL_TIME", bo, processInstance, UserContext.fromUID(processInstance.getCreateUser()));
}
}
SDK.getBOAPI().create("BO_ACT_DATAID",recordLists, processInstance, UserContext.fromUID(processInstance.getCreateUser()));
long endTime2 = System.currentTimeMillis();
System.err.println(processInstance.getTitle() + "批量插入OA待阅数据====>" + "用时:"
+ (endTime2 - startTime2) / 1000 + "");
}
long set_end_time = System.currentTimeMillis();
bo_OA_read.set("SET_END_TIME",set_end_time);
bo_OA_read.set("SET_SUM_TIME",(set_end_time-set_start_time));
bo_OA_read.set("PROCESS_ID",processInstance.getId());
SDK.getBOAPI().create("BO_EU_OA_READ_LOG", bo_OA_read, processInstance, UserContext.fromUID(processInstance.getCreateUser()));
if("单个账号推送".equals(type)) {
DBSql.update("UPDATE BO_EU_READ_COUNT SET RESULT = '已重新推送' WHERE PROCESSID = '"+processInstId+"' AND NAME = '"+resrt+"'");
}
} else {
List<String> idList = Arrays.asList(resrt);
BO bo = null;
List<BO> recordFailLists = new ArrayList<BO>();
if(idList.size()>0){
for (String userId : idList) {
System.out.println(processInstance.getTitle() + "待阅推送失败:" + userId);
try {
bo= new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("NAME", userId);
bo.set("TYPE", type);
bo.set("RESULT", "待处理");
bo.set("PROCESSID", processInstId);
bo.set("DEPNAME", SDK.getORGAPI().getUser(userId).getDepartmentId());
//SDK.getBOAPI().create("BO_EU_READ_COUNT", bo, processInstance.getId(), processInstance.getCreateUser());
recordFailLists.add(bo);
} catch (Exception e) {
bo= new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("NAME", userIds);
bo.set("TYPE", type);
bo.set("RESULT", "待处理");
bo.set("PROCESSID", processInstId);
bo.set("DEPNAME", SDK.getORGAPI().getUser(userIds).getDepartmentId());
//SDK.getBOAPI().create("BO_EU_READ_COUNT", bo, processInstance.getId(), processInstance.getCreateUser());
recordFailLists.add(bo);
}
}
System.out.println("recordFailLists========="+recordFailLists.size());
SDK.getBOAPI().create("BO_EU_READ_COUNT", recordFailLists, processInstance, UserContext.fromUID(processInstance.getCreateUser()));
}
}
}
public ArrayList<String> getSendList(ProcessInstance instanceById, BO bo_act_coe_publish1, JSONObject jsonObject) { public ArrayList<String> getSendList(ProcessInstance instanceById, BO bo_act_coe_publish1, JSONObject jsonObject) {
String sendType = bo_act_coe_publish1.getString("SEND_SCOP"); String sendType = bo_act_coe_publish1.getString("SEND_SCOP");
String org = bo_act_coe_publish1.getString("SEND_SCOPE_ORG"); String org = bo_act_coe_publish1.getString("SEND_SCOPE_ORG");

View File

@ -0,0 +1,612 @@
package com.actionsoft.apps.coe.pal.datamigration;
import com.actionsoft.apps.coe.pal.datamigration.Utils.UtilUrl;
import com.actionsoft.bpms.bo.engine.BO;
import com.actionsoft.bpms.bpmn.engine.model.run.delegate.ProcessInstance;
import com.actionsoft.bpms.bpmn.engine.model.run.delegate.TaskInstance;
import com.actionsoft.bpms.commons.database.RowMap;
import com.actionsoft.bpms.org.model.DepartmentModel;
import com.actionsoft.bpms.org.model.UserModel;
import com.actionsoft.bpms.schedule.IJob;
import com.actionsoft.bpms.server.UserContext;
import com.actionsoft.bpms.util.DBSql;
import com.actionsoft.bpms.util.UtilString;
import com.actionsoft.sdk.local.SDK;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
public class SendOAread implements IJob {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
String cc = SDK.getJobAPI().getJobParameter(jobExecutionContext);
System.err.println("推送OA待阅执行开始====>");
long startTime = System.currentTimeMillis();
ArrayList<String> sendList = new ArrayList<String>();
ProcessInstance pc = SDK.getProcessAPI().getInstanceById(cc);
BO bo_act_coe_publish1 = SDK.getBOAPI().query("BO_ACT_COE_PUBLISH", true)
.addQuery("BINDID=", pc.getId())
.addQuery("OPTIONTYPE IS NOT NULL", null).detail();
String sql = "SELECT ID FROM WFH_TASK WHERE PROCESSINSTID = '" + pc.getId()
+ "' AND ACTIVITYDEFID = 'obj_c9e5a3144b200001b68cffa01ed0153e' ";
String taskInd = DBSql.getString(sql);
TaskInstance ta = SDK.getTaskAPI().getInstanceById(taskInd);
String portalUrl = SDK.getPortalAPI().getPortalUrl();
String url = portalUrl + "/r/or?cmd=com.yili_process_page&oauthName=oauthLogin&processInstId="
+ pc.getId() + "&taskInstId="
+ taskInd;
String mobileurl = "https://bpm.yili.com:8088/portal"
+ "/r/or?cmd=com.yili_process_page_phone&corpid=wwb0ae23173b140618&appAgentId=1000014&oauthName=wechat&processInstId="
+ pc.getId() + "&taskInstId="
+ taskInd;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//Timestamp endTime = processExecutionContext.getTaskInstance().getBeginTime();
Timestamp endTime = new Timestamp(System.currentTimeMillis());
JSONObject jsonObject = new JSONObject(new LinkedHashMap());
jsonObject.put("action", "read");
jsonObject.put("title", " " + "" + bo_act_coe_publish1.getString("PROCESS_TITLE") + "");
jsonObject.put("dept", SDK.getORGAPI()
.getDepartmentByUser(ta.getTarget()).getNo());// SDK.getORGAPI().getDepartmentByUser(processExecutionContext.getProcessInstance().getCreateUser()).getNo()
String target = ta.getTarget();
jsonObject.put("user", target);
// jsonObject.put("user",);//processExecutionContext.getProcessInstance().getCreateUser()
jsonObject.put("date", sdf.format(endTime));
jsonObject.put("remark", bo_act_coe_publish1.getString("PROCESS_TITLE"));
jsonObject.put("status", "0");
jsonObject.put("dataid", pc.getId());
jsonObject.put("pcurl", url);
jsonObject.put("mobileurl", mobileurl);
int count = 1;
int count2 = 1;
int count3 = 1;
// 发送组织岗位职级
sendList = getSendList(pc, bo_act_coe_publish1, jsonObject);
ArrayList<String> finalList = new ArrayList<String>();
System.out.println("titile==============" + pc.getTitle());
System.out.println("sendList==============" + sendList.toString());
System.out.println("sendList.size()==============" + sendList.size());
List<String> finalLists = new ArrayList<>();
ProcessInstance boProcessInstance = SDK.getProcessAPI()
.createBOProcessInstance("obj_c14a0187c4d0463baa22752711f65947", "admin", "OA补充发送手动清单");
/* for (String oneid : sendList) {
BO actDataid = SDK.getBOAPI().query("BO_ACT_DATAID").addQuery("USER_ID=", oneid).addQuery("PROCESSID=", pc.getId()).detail();
BO actAlreadyDataid = SDK.getBOAPI().query("BO_ACT_ALREADY_DATAID").addQuery("USER_ID=", oneid).addQuery("PROCESSID=", pc.getId()).detail();
*//*if(actDataid==null && actAlreadyDataid==null){*//*
BO bo = new BO();
bo.set("PROCESSTITLE", pc.getTitle());
bo.set("JSRCODE", oneid);
bo.set("FBJG", "总部企业事务部");
bo.set("FFRCODE", "10039924");
bo.set("FBRQ", "2023-07-11");
bo.set("ZT", "未读");
String pcurl = "https://bpm.yili.com:8088/portal/r/or?cmd=com.yili_process_page&oauthName=oauthLogin&processInstId=" + pc.getId() + "&taskInstId=69bc4788-071b-41e0-a07c-b28ac6574a78&usercode=" + oneid;
bo.set("PCURL", pcurl);
String wqurl = "https://bpm.yili.com:8088/portal/r/or?cmd=com.yili_process_page_phone&corpid=wwb0ae23173b140618&appAgentId=1000014&oauthName=wechat&processInstId=" + pc.getId() + "&taskInstId=69bc4788-071b-41e0-a07c-b28ac6574a78";
bo.set("QWURL", wqurl);
SDK.getBOAPI().create("BO_ACT_OA_SUPP_SENDING", bo, boProcessInstance.getId(), "");
*//*}*//*
}*/
List<String> list = new LinkedList<>();
list.add("10036614");
list.add("10056870");
System.out.println("新list>>>>>>"+list.size());
for (String user : list) {
try {
SendOARead(jsonObject, pc, user, "批量推送");
} catch (Exception e) { // TODO: handle exception
//2023-07-12 14:51:03--job worker-9d60ecf3-d70c-4b15-a271-6cfce754ff25,ijob--sendList.size()==============20393
}
}
long endTimes = System.currentTimeMillis();
// 存入日志
// createReadLog(pc, jsonObject, sendList, startTime, endTimes);
System.err.println(pc.getTitle() + "推送OA待阅执行完毕====>" + "用时:"
+ (endTimes - startTime) / 1000 / 60 + "分钟");
}
/**
* 发送OA待阅数据
*
* @param jsonObject
* @param processInstance
* @throws DocumentException
*/
public void SendOARead(JSONObject jsonObject, ProcessInstance processInstance, String userIds, String type)
throws DocumentException {
String processInstId = processInstance.getId();
// System.err.println(processInstance.getTitle() + "开始发送:" + userId);
if ("".equals(userIds) || UtilString.isEmpty(userIds)) {
return;
}
jsonObject.put("userList", userIds);
String xmlStr = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"webservices.yili.weaver.com.cn\">\n"
+ " <soapenv:Header/>" + " <soapenv:Body>" + " <web:service>" + " <web:in0>"
+ "<![CDATA[" + jsonObject + "]]>" + " </web:in0>" + " </web:service>"
+ " </soapenv:Body>" + "</soapenv:Envelope>";
// System.out.println("xmlStr>>>>>>>>" + xmlStr);
String readurl = SDK.getAppAPI().getProperty("com.awspaas.user.apps.yili.integration", "readurl");
try {
String postSoap = UtilUrl.doPostSoap(readurl, xmlStr, "");
Document document = DocumentHelper.parseText(postSoap);
Element rootElement = document.getRootElement();
// System.out.println("rootElement>>>>>>" + rootElement);
Element result = rootElement.element("Body").element("serviceResponse").element("out");
String resultString = result.getData().toString();
JSONObject jsonObject1 = JSON.parseObject(resultString);
String datas = jsonObject1.getString("data");
String status = jsonObject1.getString("status");
// System.out.println("推送》》》》》》》》》》》" + status);
if ("true".equals(status)) {
JSONArray resultArray = JSONObject.parseArray(datas);
//System.out.println(processInstance.getTitle() + "待阅推送成功:" + idList.size()+"");
int sucount = 1;
for (int j = 0; j < resultArray.size(); j++) {
JSONObject jsonObject2 = resultArray.getJSONObject(j);
String user = jsonObject2.get("user").toString();
String dataid = jsonObject2.get("dataid").toString();
BO bo = new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("PROCESSID", processInstance.getId());
bo.set("USER_ID", user);
bo.set("USERDEP", SDK.getORGAPI().getUser(user).getDepartmentId());
bo.set("DATAID", dataid);
bo.set("RESULT", status);
bo.set("SENDTYPE", "1");
bo.set("READSTATE", "未读");
bo.set("TYPE", type);
SDK.getBOAPI().create("BO_ACT_DATAID", bo, processInstance.getId(), processInstance.getCreateUser());
/*BO oa_real_time = SDK.getBOAPI().query("BO_ACT_OA_REAL_TIME").addQuery("PROCESSID=", processInstance.getId()).detail();
if (oa_real_time != null) {
int r1 = DBSql.update("UPDATE BO_ACT_OA_REAL_TIME SET SENDNUMSJ='" + sucount + "'WHERE PROCESSID ='" + processInstId + "'");
} else {
//插入实时更新人数表
BO realTimeBO = new BO();
realTimeBO.set("USREID", user);
realTimeBO.set("DEPID", SDK.getORGAPI().getUser(user).getDepartmentId());
realTimeBO.set("BUNAME", SDK.getORGAPI().getUser(user).getExt4());
realTimeBO.set("TITLE", processInstance.getTitle());
realTimeBO.set("PROCESSID", processInstance.getId());
realTimeBO.set("SENDNUMSJ", 1);
SDK.getBOAPI().create("BO_ACT_OA_REAL_TIME", bo, processInstance.getId(), processInstance.getCreateUser());
}
sucount++;*/
}
if ("单个账号推送".equals(type)) {
DBSql.update("UPDATE BO_EU_READ_COUNT SET RESULT = '已重新推送' WHERE PROCESSID = '" + processInstId + "' AND NAME = '" + userIds + "'");
}
} else {
System.out.println(processInstance.getTitle() + "待阅推送失败:" + userIds);
try {
BO bo = new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("NAME", userIds);
bo.set("TYPE", type);
bo.set("RESULT", "待处理");
bo.set("PROCESSID", processInstId);
bo.set("DEPNAME", SDK.getORGAPI().getUser(userIds).getDepartmentId());
SDK.getBOAPI().create("BO_EU_READ_COUNT", bo, processInstance.getId(), processInstance.getCreateUser());
} catch (Exception e) {
// TODO: handle exception
}
}
} catch (Exception e) {
System.out.println(processInstance.getTitle() + "待阅推送失败:" + userIds);
BO bo = new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("NAME", userIds);
bo.set("TYPE", type);
bo.set("RESULT", "待处理");
bo.set("PROCESSID", processInstId);
bo.set("DEPNAME", SDK.getORGAPI().getUser(userIds).getDepartmentId());
SDK.getBOAPI().create("BO_EU_READ_COUNT", bo, processInstance.getId(), processInstance.getCreateUser());
}
}
public ArrayList<String> getSendList(ProcessInstance instanceById, BO bo_act_coe_publish1, JSONObject jsonObject) {
String sendType = bo_act_coe_publish1.getString("SEND_SCOP");
String org = bo_act_coe_publish1.getString("SEND_SCOPE_ORG");
String post = bo_act_coe_publish1.getString("SEND_SCOPE_POST");
String level = bo_act_coe_publish1.getString("SEND_SCOPE_LEVEL");
ArrayList<String> userList = new ArrayList<>();
if ("1".equals(sendType)) {
//System.err.println("发送全集团=====>" + instanceById.getTitle());
userList = sendOrg(org, userList, instanceById, bo_act_coe_publish1, jsonObject, sendType);
} else {
/**
* 先组织和职级取交集然后再和岗位取并集
*/
if (UtilString.isNotEmpty(org) && UtilString.isNotEmpty(post) && UtilString.isNotEmpty(level)) {
//System.err.println("发送组织/岗位/职级=====>" + instanceById.getTitle());
ArrayList<String> sendOrgList = sendOrg(org, userList, instanceById, bo_act_coe_publish1, jsonObject,
sendType);
ArrayList<String> sendLevel = sendLevel(level, sendOrgList, instanceById, bo_act_coe_publish1, jsonObject);
userList = sendPost(post, sendLevel, instanceById, bo_act_coe_publish1,
jsonObject);
}
// 如果职级为空组织/岗位取并集
if (UtilString.isNotEmpty(org) && UtilString.isNotEmpty(post) && UtilString.isEmpty(level)) {
//System.err.println("发送组织/岗位=====>" + instanceById.getTitle());
ArrayList<String> sendOrgList = sendOrg(org, userList, instanceById, bo_act_coe_publish1, jsonObject,
sendType);
userList = sendPost(post, sendOrgList, instanceById, bo_act_coe_publish1, jsonObject);
}
// 如果岗位为空组织/职级取交集
if (UtilString.isNotEmpty(org) && UtilString.isEmpty(post) && UtilString.isNotEmpty(level)) {
//System.err.println("发送组织/职级=====>" + instanceById.getTitle());
ArrayList<String> sendOrgList = sendOrg(org, userList, instanceById, bo_act_coe_publish1, jsonObject,
sendType);
userList = sendLevel(level, sendOrgList, instanceById, bo_act_coe_publish1, jsonObject);
}
/**
* 组织为空 岗位和职级取并集
*/
if (UtilString.isEmpty(org) && UtilString.isNotEmpty(post) && UtilString.isNotEmpty(level)) {
//System.err.println("发送岗位/职级=====>" + instanceById.getTitle());
ArrayList<String> sendLevel2 = sendLevel2(level, userList, instanceById, bo_act_coe_publish1, jsonObject);
userList = sendPost(post, sendLevel2, instanceById, bo_act_coe_publish1,
jsonObject);
}
// 如果只有组织不为空
if (UtilString.isNotEmpty(org) && UtilString.isEmpty(post) && UtilString.isEmpty(level)) {
//System.err.println("发送组织=====>" + instanceById.getTitle());
userList = sendOrg(org, userList, instanceById, bo_act_coe_publish1, jsonObject, sendType);
}
// 如果只有岗位不为空
if (UtilString.isEmpty(org) && UtilString.isNotEmpty(post) && UtilString.isEmpty(level)) {
//System.err.println("发送岗位=====>" + instanceById.getTitle());
userList = sendPost(post, userList, instanceById, bo_act_coe_publish1, jsonObject);
}
// 如果只有职级不为空
if (UtilString.isEmpty(org) && UtilString.isEmpty(post) && UtilString.isNotEmpty(level)) {
//System.err.println("发送职级=====>" + instanceById.getTitle());
userList = sendLevel2(level, userList, instanceById, bo_act_coe_publish1, jsonObject);
}
}
return userList;
}
// 只发送职级
public ArrayList<String> sendLevel2(String level, ArrayList<String> userList, ProcessInstance instanceById,
BO bo_act_coe_publish1, JSONObject jsonObject) {
String processid = instanceById.getId();
ArrayList<String> userList_level = new ArrayList<String>();
// 获取职级
if (StringUtils.isNotEmpty(level)) {
String ranks[] = level.split(",");
String rankss = "";
if (ranks.length == 1) {
// DBSql.getMap("select USERID from ORGUSER WHERE POSITION_NO IN ");
rankss = "'" + ranks[0] + "'";
} else {
rankss = "'" + StringUtils.join(ranks, "','") + "'";
}
// 取交集
String sql2 = "select * from ORGUSER where EXT2 in (" + rankss + ") and userno is not null";
List<RowMap> maps2 = DBSql.getMaps(sql2);
for (RowMap rowMap : maps2) {
String userId = rowMap.getString("USERID");
boolean closed = SDK.getORGAPI().getUser(userId).isClosed();
if (!closed) {
userList_level.add(userId);
}
}
}
return userList_level;
}
// 发送岗位
public ArrayList<String> sendPost(String post, ArrayList<String> userList, ProcessInstance instanceById,
BO bo_act_coe_publish1, JSONObject jsonObject) {
String processid = instanceById.getId();
// 获取岗位
if (StringUtils.isNotEmpty(post)) {
String posts[] = post.split(",");
// 取并集
String postss = "";
if (posts.length == 1) {
// DBSql.getMap("select USERID from ORGUSER WHERE POSITION_NO IN ");
postss = "'" + posts[0] + "'";
} else {
postss = "'" + StringUtils.join(posts, "','") + "'";
}
String sql = "select * from ORGUSER where POSITION_NO in (" + postss + ") and userno is not null";
List<RowMap> maps1 = DBSql.getMaps(sql);
for (RowMap rowMap : maps1) {
String userId = rowMap.getString("USERID");
if (!userList.contains(userId)) {
boolean closed = SDK.getORGAPI().getUser(userId).isClosed();
if (!closed) {
userList.add(userId);
}
}
}
}
return userList;
}
// 发送组织
public ArrayList<String> sendOrg(String org, ArrayList<String> userList, ProcessInstance instanceById,
BO bo_act_coe_publish1, JSONObject jsonObject, String sendType) {
String processid = instanceById.getId();
// 获取组织
if (StringUtils.isNotEmpty(org) || "1".equals(sendType)) {
long startTime = System.currentTimeMillis();
userList = getUser(jsonObject, org, sendType, processid);
long endTimes = System.currentTimeMillis();
// System.out.println(instanceById.getTitle()+"_根据部门获取人员用时===>"+(endTimes-startTime)/1000);
}
return userList;
}
// 发送职级
public ArrayList<String> sendLevel(String level, ArrayList<String> userList, ProcessInstance instanceById,
BO bo_act_coe_publish1, JSONObject jsonObject) {
String processid = instanceById.getId();
ArrayList<String> userList_level = new ArrayList<String>();
// 获取职级
if (StringUtils.isNotEmpty(level)) {
String ranks[] = level.split(",");
String rankss = "";
if (ranks.length == 1) {
// DBSql.getMap("select USERID from ORGUSER WHERE POSITION_NO IN ");
rankss = "'" + ranks[0] + "'";
} else {
rankss = "'" + StringUtils.join(ranks, "','") + "'";
}
// 取交集
String sql2 = "select * from ORGUSER where EXT2 in (" + rankss + ") and userno is not null";
List<RowMap> maps2 = DBSql.getMaps(sql2);
for (RowMap rowMap : maps2) {
String userId = rowMap.getString("USERID");
if (userList.contains(userId)) {
boolean closed = SDK.getORGAPI().getUser(userId).isClosed();
if (!closed) {
userList_level.add(userId);
}
}
}
}
return userList_level;
}
/**
* 根据部门id获取当前部门以及下级部门的人员信息
*
* @param processid
* @return
*/
public ArrayList<String> getUser(JSONObject jsonObject, String depIds, String sendType, String processid) {
ArrayList<String> arr = new ArrayList<String>();
ArrayList<String> arr_test = new ArrayList<String>();
// 全集团
if ("1".equals(sendType)) {
List<DepartmentModel> departmentsByCompanyId = SDK.getORGAPI().getDepartmentsByCompanyId(1,
"8911e732-b42a-4556-853f-ad32761bcbee");
for (DepartmentModel departmentModel : departmentsByCompanyId) {
String id = departmentModel.getId();
// 查询未注销的部门并且去掉系统部门
if (!departmentModel.isClosed() && !"5bc3a2dc-3bd2-4376-bcc3-5612e28e55fe".equals(id)
&& !"e79281b1-2f81-4895-b30e-9f96e9ad0e2c".equals(id)
&& !"65048aee-157f-49f2-a2dc-5903dd26f519".equals(id)) {
getUserList(jsonObject, arr_test, arr, id, processid);
}
}
} else {
if (UtilString.isNotEmpty(depIds)) {
String[] split = depIds.split(",");
for (String depId : split) {
getUserList(jsonObject, arr_test, arr, depId, processid);
}
}
}
// System.err.println(SDK.getProcessAPI().getInstanceById(processid) +
// "_得到的总人数为" + arr_test.size());
// System.err.println(SDK.getProcessAPI().getInstanceById(processid) +
// "_得到的过滤后的人数为" + arr.size());
return arr;
}
public void getUserList(JSONObject jsonObject, ArrayList<String> arr_test, ArrayList<String> arr,
String departmentId, String processid) {
// 获取当前部门下人员
List<UserModel> userModelList = SDK.getORGAPI().getAllUsersByDepartment(departmentId);
for (UserModel userModel : userModelList) {
if (!userModel.isClosed()) {
String uid = userModel.getUID();
if (!arr.contains(uid)) {
if (!"10033643".equals(uid)) {
// System.err.println("发送人员======>" + uid); }
arr.add(uid);
}
/*
* RowMap map = DBSql.getMap("SELECT ID FROM BO_ACT_DATAID WHERE PROCESSID = '"
* + processid + "' AND USER_ID = '" + uid + "'"); if (map == null) {
* //System.err.println("发送人员======>" + uid); }
*/
}
}
}
// 获取当前部门的子部门人员
DepartmentModel departmentById = SDK.getORGAPI().getDepartmentById(departmentId);
if (departmentById.isExistSubModelOfCache()) {
getSubDepartments(jsonObject, arr_test, arr, departmentById, processid);
}
}
// 获取子部门人员
public void getSubDepartments(JSONObject jsonObject, ArrayList<String> arr_test, ArrayList<String> arr,
DepartmentModel departmentById, String processid) {
if (!departmentById.isClosed()) {
List<DepartmentModel> subDepartments = SDK.getORGAPI().getSubDepartments(departmentById.getId());
for (DepartmentModel departmentModel : subDepartments) {
if (!departmentModel.isClosed()) {
String id = departmentModel.getId();
List<UserModel> userModelList = SDK.getORGAPI().getAllUsersByDepartment(id);
for (UserModel userModel : userModelList) {
if (!userModel.isClosed()) {
String uid = userModel.getUID();
if (!arr.contains(uid)) {
if (!"10033643".equals(uid)) {
// System.err.println("发送人员======>" + uid); }
arr.add(uid);
}
// System.err.println(SDK.getProcessAPI().getInstanceById(processid) +
// "_发送人员======>" + uid);
}
}
}
// 递归获取子部门下的子部门
if (SDK.getORGAPI().isExistSubDepartment(id)) {
getSubDepartments(jsonObject, arr_test, arr, SDK.getORGAPI().getDepartmentById(id), processid);
}
}
}
}
}
/**
* 创建待阅日志
*
* @param jsonObject
* @param startTime
*/
public void createReadLog(ProcessInstance pc, JSONObject jsonObject,
ArrayList<String> arr, long startTime, long endTimes) {
BO bo_Read_log = new BO();
String processInstId = pc.getId();
bo_Read_log.set("USREID", pc.getCreateUser());
bo_Read_log.set("DEPID", pc.getCreateUserDeptId());
bo_Read_log.set("BUNAME", UserContext.fromUID(pc.getCreateUser()).getUserModel().getExt4());
bo_Read_log.set("TITLE", jsonObject.get("title"));
bo_Read_log.set("PROCESSID", processInstId);
bo_Read_log.set("SENDNUM", arr.size());
String sqly = "SELECT ID FROM BO_ACT_DATAID WHERE PROCESSID = '" + processInstId + "' AND SENDTYPE = '1'";
List<RowMap> mapsy = DBSql.getMaps(sqly);
String alsqly = "SELECT ID FROM BO_ACT_ALREADY_DATAID WHERE PROCESSID = '" + processInstId + "' AND SENDTYPE = '1'";
List<RowMap> almapsy = DBSql.getMaps(alsqly);
bo_Read_log.set("SENDNUMSJ", mapsy.size() + almapsy.size());
BO bo_act_coe_publishs = SDK.getBOAPI().query("BO_ACT_COE_PUBLISH", true).addQuery("BINDID=", processInstId)
.addQuery("OPTIONTYPE IS NOT NULL", null).detail();
String send_scop = bo_act_coe_publishs.getString("SEND_SCOP");
bo_Read_log.set("SEND_SCOP", send_scop);
String SEND_SCOPE_ORG = bo_act_coe_publishs.getString("SEND_SCOPE_ORG");
if (UtilString.isNotEmpty(SEND_SCOPE_ORG)) {
String[] resulr = SEND_SCOPE_ORG.split(",");
bo_Read_log.set("SEND_SCOPE_ORGNUM", resulr.length);
}
String SEND_SCOPE_POST = bo_act_coe_publishs.getString("SEND_SCOPE_POST");
if (UtilString.isNotEmpty(SEND_SCOPE_POST)) {
String[] resulr = SEND_SCOPE_POST.split(",");
bo_Read_log.set("SEND_SCOPE_POST_NUM", resulr.length);
}
String SEND_SCOPE_LEVEL = bo_act_coe_publishs.getString("SEND_SCOPE_LEVEL");
if (UtilString.isNotEmpty(SEND_SCOPE_LEVEL)) {
String[] resulr = SEND_SCOPE_LEVEL.split(",");
bo_Read_log.set("SEND_SCOPE_LEVEL_NUM", resulr.length);
}
bo_Read_log.set("STARTTIMES", startTime);
bo_Read_log.set("ENDTIMES", endTimes);
long time = endTimes - startTime;
long diffSeconds = time / 1000 % 60;
long diffMinutes = time / (60 * 1000) % 60;
long diffHours = time / (60 * 60 * 1000) % 24;
long diffDays = time / (24 * 60 * 60 * 1000);
String remainTime = "";
if (diffDays != 0 && diffHours != 0) {
remainTime = diffDays + "" + diffHours + "小时" + diffMinutes + "分钟" + diffSeconds + "";
} else if (diffDays == 0 && diffHours != 0 && diffMinutes != 0) {
remainTime = diffHours + "小时" + diffMinutes + "分钟" + diffSeconds + "";
} else if (diffDays == 0 && diffHours == 0 && diffMinutes != 0) {
remainTime = diffMinutes + "分钟" + diffSeconds + "";
} else if (diffDays == 0 && diffHours == 0 && diffMinutes == 0) {
remainTime = diffSeconds + "";
}
bo_Read_log.set("TIMECOUNT", remainTime);
// 文件发布成功回执流程
ProcessInstance processInst = SDK.getProcessAPI().createProcessInstance("obj_b4700f89a7a144c086d047de0cfe9531",
"admin", jsonObject.get("title") + "成功发布回执单");
SDK.getBOAPI().create("BO_EU_PAL_PULBISH_SUCCESS", bo_Read_log, processInst, UserContext.fromUID("admin"));
TaskInstance taskInst = SDK.getProcessAPI().start(processInst).fetchActiveTasks().get(0);
SDK.getTaskAPI().completeTask(taskInst.getId(), "admin");
}
}

View File

@ -2,6 +2,7 @@ package com.actionsoft.apps.coe.pal.datamigration;
import com.actionsoft.apps.coe.pal.datamigration.Utils.UtilUrl; import com.actionsoft.apps.coe.pal.datamigration.Utils.UtilUrl;
import com.actionsoft.bpms.bo.engine.BO; import com.actionsoft.bpms.bo.engine.BO;
import com.actionsoft.bpms.bpmn.engine.core.delegate.ProcessExecutionContext;
import com.actionsoft.bpms.bpmn.engine.model.run.delegate.ProcessInstance; import com.actionsoft.bpms.bpmn.engine.model.run.delegate.ProcessInstance;
import com.actionsoft.bpms.bpmn.engine.model.run.delegate.TaskInstance; import com.actionsoft.bpms.bpmn.engine.model.run.delegate.TaskInstance;
import com.actionsoft.bpms.commons.database.RowMap; import com.actionsoft.bpms.commons.database.RowMap;
@ -25,16 +26,13 @@ import org.quartz.JobExecutionException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.LinkedHashMap; import java.util.concurrent.ExecutorService;
import java.util.LinkedList; import java.util.concurrent.Executors;
import java.util.List;
public class ijob implements IJob { public class ijob implements IJob {
private int sendTotal;
private int sucount = 1;
@Override @Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
@ -42,7 +40,7 @@ public class ijob implements IJob {
System.err.println("推送OA待阅执行开始====>"); System.err.println("推送OA待阅执行开始====>");
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
ArrayList<String> sendList = new ArrayList<String>(); ArrayList<String> sendList = new ArrayList<String>();
String new_uid = "";
ProcessInstance pc = SDK.getProcessAPI().getInstanceById(cc); ProcessInstance pc = SDK.getProcessAPI().getInstanceById(cc);
BO bo_act_coe_publish1 = SDK.getBOAPI().query("BO_ACT_COE_PUBLISH", true) BO bo_act_coe_publish1 = SDK.getBOAPI().query("BO_ACT_COE_PUBLISH", true)
.addQuery("BINDID=", pc.getId()) .addQuery("BINDID=", pc.getId())
@ -120,17 +118,70 @@ public class ijob implements IJob {
*//*}*//* *//*}*//*
}*/ }*/
List<String> list = new LinkedList<>(); ArrayList<String> list = new ArrayList<>();
List<BO> bo_eu_require_data = SDK.getBOAPI().query("BO_EU_REQUIRE_DATA", true).addQuery("PROCESS_ID = ", cc).list(); for (String user_id:sendList){
for(BO bo:bo_eu_require_data){ BO bo_eu_require_data = SDK.getBOAPI().query("BO_EU_HAS_BEEN_SEND", true).addQuery("PROCESS_ID = ", cc).addQuery("USER_ID=",user_id).detail();
String id = bo.getString("USER_ID"); if (bo_eu_require_data!=null){
list.add(id);
}else {
list.add(user_id);
}
} }
System.out.println("新list>>>>>>"+list.size());
for (String user : list) { new_uid = new_uid.join(",", list);
long startTimes = System.currentTimeMillis();
String[] users = new_uid.split(",");
System.out.println("new_uid>>>>>>>>>>>>>>"+users.length);
int length = 100;
int ys = users.length%length;
/**
* 这个是以300人作为一个发送单位去放到list中并发送待阅数据
*/
if (ys==0) {
int size = users.length/length;
int flag = 0;
List<String[]> lists = new LinkedList();
for (int i=0;i<size;i++){
String[] results;
results = Arrays.copyOfRange(users, flag, flag+100);
lists.add(results);
flag = flag+100;
}
/**
* 创建线程发送待阅数据
*/
course(lists,startTime,jsonObject,pc,list);
//System.out.println("发送人员数据>>>>>>>>>>>>>>"+list);
}else {
int size = users.length/length;
int flag = 0;
List<String[]> lists = new LinkedList();
for (int i=0;i<size;i++){
String[] results;
results = Arrays.copyOfRange(users, flag, flag+100);
lists.add(results);
flag = flag+100;
}
String[] redata;
redata = Arrays.copyOfRange(users, flag, flag+ys);
lists.add(redata);
// 创建线程来实现为每300人为一个的线程跑待阅
/**
* 创建线程发送待阅数据
*/
course(lists,startTime,jsonObject,pc,list);
//System.out.println("发送人员数据>>>>>>>>>>>>>>"+list);
}
/*System.out.println("新list>>>>>>"+list.size());
for (String user : lists) {
try { try {
SendOARead(jsonObject, pc, user, "批量推送"); SendOARead(jsonObject, pc, user, "批量推送");
} catch (Exception e) { // TODO: handle exception } catch (Exception e) { // TODO: handle exception
@ -143,7 +194,187 @@ public class ijob implements IJob {
// 存入日志 // 存入日志
createReadLog(pc, jsonObject, sendList, startTime, endTimes); createReadLog(pc, jsonObject, sendList, startTime, endTimes);
System.err.println(pc.getTitle() + "推送OA待阅执行完毕====>" + "用时:" System.err.println(pc.getTitle() + "推送OA待阅执行完毕====>" + "用时:"
+ (endTimes - startTime) / 1000 / 60 + "分钟"); + (endTimes - startTime) / 1000 / 60 + "分钟");*/
}
public void course(List<String[]> list, long startTime, JSONObject jsonObject, ProcessInstance processInstance,ArrayList<String> sendList){
// 创建线程来实现为每100人为一个的线程跑待阅
ExecutorService service = Executors.newFixedThreadPool(5);
int m = 0;
for (String[] resrt:list
) {
int finalM = m;
service.execute(new Runnable() {
@Override
public void run() {
System.out.println("最后一个数组是什么>>>>>>>"+Arrays.asList(resrt).size());
try {
SendOARead(jsonObject, processInstance, resrt,"批量推送");
} catch (DocumentException e) {
e.printStackTrace();
}finally {
if (finalM == list.size()-1){
List<RowMap> List = DBSql.getMaps("SELECT NAME FROM BO_EU_READ_COUNT WHERE PROCESSID = '"
+ processInstance.getId() + "' AND RESULT = '待处理'");
if (List.size() != 0) {
System.err.println(processInstance.getTitle() + "批量推送失败后执行二次推送=======>" + List.size());
for (RowMap rowMap : List) {
try {
ArrayList<String> secondUserList = new ArrayList<String>();
secondUserList.add(rowMap.getString("NAME"));
System.err.println(processInstance.getTitle() + "二次推送账号=======>" + secondUserList);
BO executiveTaskBO=SDK.getBOAPI().query("BO_ACT_EXECUTIVE_TASK").addQuery("TASKID=",processInstance.getId()).addQuery("TASKSTATUS=",2).detail();
if(executiveTaskBO!=null){
List<BO> recordFailLists = new ArrayList<BO>();
for(RowMap oneuserId:List){
BO bo = new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("NAME", oneuserId.getString("NAME"));
bo.set("TYPE", "批量推送");
bo.set("RESULT", "待处理");
bo.set("PROCESSID", processInstance.getId());
bo.set("DEPNAME", SDK.getORGAPI().getUser(oneuserId.getString("NAME")).getDepartmentId());
recordFailLists.add(bo);
}
SDK.getBOAPI().create("BO_EU_READ_COUNT", recordFailLists, processInstance.getId(), processInstance.getCreateUser());
return;
}
secondSendOARead(jsonObject, processInstance, secondUserList, "单个账号推送");
} catch (Exception e) { // TODO: handle exception
}
}
}
long endTimes = System.currentTimeMillis();
// 存入日志
createReadLog(processInstance, jsonObject, sendList, startTime, endTimes);
System.err.println(processInstance.getTitle() + "推送OA待阅执行完毕====>" + "用时:"
+ (endTimes - startTime) / 1000 / 60 + "分钟");
//发送消息通知
List<BO> readCountBO=SDK.getBOAPI().query("BO_EU_READ_COUNT").addQuery("PROCESSID=",processInstance.getId()).list();
if(readCountBO.size()>0){
SDK.getNotificationAPI().sendMessage("admin", "admin", "文件名称:"+processInstance.getTitle()+"文件有失败记录,请及时处理!!!");
}
//更新任务状态
int r1 = DBSql.update("UPDATE BO_ACT_EXECUTIVE_TASK SET ISTASKEND='2' WHERE TASKID ='" + processInstance.getId() + "'");
}
}
}
});
m++;
}
}
public void secondSendOARead(JSONObject jsonObject, ProcessInstance processInstance, List<String> idList,String type)
throws DocumentException {
System.out.println("idList========="+idList.toString());
String processInstId = processInstance.getId();
// System.err.println(processInstance.getTitle() + "开始发送:" + userId);
/*
* if ("".equals(userId) || UtilString.isEmpty(userId)) { return; }
*/
if (idList.size() == 0) {
return;
}
String userIds = StringUtils.join(idList, ",");
jsonObject.put("userList", userIds);
String xmlStr = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"webservices.yili.weaver.com.cn\">\n"
+ " <soapenv:Header/>" + " <soapenv:Body>" + " <web:service>" + " <web:in0>"
+ "<![CDATA[" + jsonObject + "]]>" + " </web:in0>" + " </web:service>"
+ " </soapenv:Body>" + "</soapenv:Envelope>";
// System.out.println("xmlStr>>>>>>>>" + xmlStr);
String readurl = SDK.getAppAPI().getProperty("com.awspaas.user.apps.yili.integration", "readurl");
String postSoap = UtilUrl.doPostSoap(readurl, xmlStr, "");
Document document = DocumentHelper.parseText(postSoap);
Element rootElement = document.getRootElement();
Element result = rootElement.element("Body").element("serviceResponse").element("out");
String resultString = result.getData().toString();
JSONObject jsonObject1 = JSON.parseObject(resultString);
System.out.println("jsonObject1==============="+jsonObject1);
String datas = jsonObject1.getString("data");
System.out.println("data================="+datas);
String status = jsonObject1.getString("status");
System.out.println("推送》》》》》》》》》》》" + status);
if ("true".equals(status)) {
JSONArray resultArray = JSONObject.parseArray(datas);
System.out.println(processInstance.getTitle() + "待阅推送成功:" + idList.size()+"");
//批量入库操作
//加入时间戳
if(resultArray.size()>0){
List<BO> recordLists = new ArrayList<BO>();
long startTime2 = System.currentTimeMillis();
for (int j = 0; j < resultArray.size(); j++) {
JSONObject jsonObject2 = resultArray.getJSONObject(j);
String user = jsonObject2.get("user").toString();
String dataid = jsonObject2.get("dataid").toString();
BO bo = new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("PROCESSID", processInstance.getId());
bo.set("USER_ID", user);
bo.set("USERDEP", SDK.getORGAPI().getUser(user).getDepartmentId());
bo.set("DATAID", dataid);
bo.set("RESULT", status);
bo.set("SENDTYPE", "1");
bo.set("READSTATE", "未读");
bo.set("TYPE", type);
recordLists.add(bo);
BO oa_real_time=SDK.getBOAPI().query("BO_ACT_OA_REAL_TIME").addQuery("PROCESSID=",processInstance.getId()).detail();
String sqly = "SELECT ID FROM BO_ACT_DATAID WHERE PROCESSID = '" + processInstId + "' AND SENDTYPE = '1'";
List<RowMap> mapsy = DBSql.getMaps(sqly);
if(oa_real_time!=null){
int r1 = DBSql.update("UPDATE BO_ACT_OA_REAL_TIME SET SENDNUMSJ='" + mapsy.size() + "'WHERE PROCESSID ='" + processInstance.getId() + "'");
}else{
//插入实时更新人数表
BO realTimeBO=new BO();
realTimeBO.set("USREID", user);
realTimeBO.set("DEPID", SDK.getORGAPI().getUser(user).getDepartmentId());
realTimeBO.set("BUNAME",SDK.getORGAPI().getUser(user).getExt4());
realTimeBO.set("TITLE", processInstance.getTitle());
realTimeBO.set("PROCESSID", processInstance.getId());
realTimeBO.set("SENDNUMSJ", 1);
realTimeBO.set("SENDNUM",sendTotal);
SDK.getBOAPI().create("BO_ACT_OA_REAL_TIME", bo, processInstance.getId(), processInstance.getCreateUser());
}
}
SDK.getBOAPI().create("BO_ACT_DATAID",recordLists, processInstance.getId(), processInstance.getCreateUser());
long endTime2 = System.currentTimeMillis();
System.err.println(processInstance.getTitle() + "二次批量插入OA待阅数据====>" + "用时:"
+ (endTime2 - startTime2) / 1000 + "");
}
if("单个账号推送".equals(type)) {
DBSql.update("UPDATE BO_EU_READ_COUNT SET RESULT = '已重新推送' WHERE PROCESSID = '"+processInstId+"' AND NAME = '"+userIds+"'");
}
}
} }
@ -155,7 +386,7 @@ public class ijob implements IJob {
* @param processInstance * @param processInstance
* @throws DocumentException * @throws DocumentException
*/ */
public void SendOARead(JSONObject jsonObject, ProcessInstance processInstance, String userIds, String type) /* public void SendOARead(JSONObject jsonObject, ProcessInstance processInstance, String userIds, String type)
throws DocumentException { throws DocumentException {
String processInstId = processInstance.getId(); String processInstId = processInstance.getId();
@ -208,7 +439,7 @@ public class ijob implements IJob {
SDK.getBOAPI().create("BO_ACT_DATAID", bo, processInstance.getId(), processInstance.getCreateUser()); SDK.getBOAPI().create("BO_ACT_DATAID", bo, processInstance.getId(), processInstance.getCreateUser());
/*BO oa_real_time = SDK.getBOAPI().query("BO_ACT_OA_REAL_TIME").addQuery("PROCESSID=", processInstance.getId()).detail(); *//*BO oa_real_time = SDK.getBOAPI().query("BO_ACT_OA_REAL_TIME").addQuery("PROCESSID=", processInstance.getId()).detail();
if (oa_real_time != null) { if (oa_real_time != null) {
int r1 = DBSql.update("UPDATE BO_ACT_OA_REAL_TIME SET SENDNUMSJ='" + sucount + "'WHERE PROCESSID ='" + processInstId + "'"); int r1 = DBSql.update("UPDATE BO_ACT_OA_REAL_TIME SET SENDNUMSJ='" + sucount + "'WHERE PROCESSID ='" + processInstId + "'");
} else { } else {
@ -223,7 +454,7 @@ public class ijob implements IJob {
SDK.getBOAPI().create("BO_ACT_OA_REAL_TIME", bo, processInstance.getId(), processInstance.getCreateUser()); SDK.getBOAPI().create("BO_ACT_OA_REAL_TIME", bo, processInstance.getId(), processInstance.getCreateUser());
} }
sucount++;*/ sucount++;*//*
} }
if ("单个账号推送".equals(type)) { if ("单个账号推送".equals(type)) {
@ -258,8 +489,168 @@ public class ijob implements IJob {
} }
} }
*/
/**
* 发送OA待阅数据
*
* @param jsonObject
* @param processInstance
* @param results
* @throws DocumentException
*/
public void SendOARead(JSONObject jsonObject, ProcessInstance processInstance, String[] resrt,String type)
throws DocumentException {
String userIds = "";
userIds = StringUtils.join(resrt, ",");
String processInstId = processInstance.getId();
// System.err.println(processInstance.getTitle() + "开始发送:" + userId);
/*
* if ("".equals(userId) || UtilString.isEmpty(userId)) { return; }
*/
if (resrt.length == 0) {
return;
}
long start_time = System.currentTimeMillis();
System.out.println("待阅推送开始时间>>>>>>>>>>>>"+start_time);
BO bo_OA_read = new BO();
bo_OA_read.set("FIR_NUMS",resrt.length);
bo_OA_read.set("START_TIME",start_time);
jsonObject.put("userList", userIds);
String xmlStr = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"webservices.yili.weaver.com.cn\">\n"
+ " <soapenv:Header/>" + " <soapenv:Body>" + " <web:service>" + " <web:in0>"
+ "<![CDATA[" + jsonObject + "]]>" + " </web:in0>" + " </web:service>"
+ " </soapenv:Body>" + "</soapenv:Envelope>";
// System.out.println("xmlStr>>>>>>>>" + xmlStr);
String readurl = SDK.getAppAPI().getProperty("com.awspaas.user.apps.yili.integration", "readurl");
String postSoap = UtilUrl.doPostSoap(readurl, xmlStr, "");
Document document = DocumentHelper.parseText(postSoap);
Element rootElement = document.getRootElement();
Element result = rootElement.element("Body").element("serviceResponse").element("out");
String resultString = result.getData().toString();
JSONObject jsonObject1 = JSON.parseObject(resultString);
System.out.println("jsonObject1==============="+jsonObject1);
String datas = jsonObject1.getString("data");
long have_time = System.currentTimeMillis();
System.out.println("接收到返回的待阅ID时间>>>>>>>>>>>>>>>>"+have_time);
bo_OA_read.set("HAVE_TIME",have_time);
System.out.println("接收到返回的待阅耗时时间>>>>>>>>>>>>"+(have_time-start_time));
bo_OA_read.set("SUM_TIME",(have_time-start_time));
System.out.println("data================="+datas);
String status = jsonObject1.getString("status");
System.out.println("推送》》》》》》》》》》》" + status);
if ("true".equals(status)) {
JSONArray resultArray = JSONObject.parseArray(datas);
//System.out.println(processInstance.getTitle() + "待阅推送成功:" + idList.size()+"");
//批量入库操作
//加入时间戳
long set_start_time = System.currentTimeMillis();
bo_OA_read.set("SET_TIME",set_start_time);
if(resultArray.size()>0){
List<BO> recordLists = new ArrayList<BO>();
long startTime2 = System.currentTimeMillis();
for (int j = 0; j < resultArray.size(); j++) {
JSONObject jsonObject2 = resultArray.getJSONObject(j);
String user = jsonObject2.get("user").toString();
String dataid = jsonObject2.get("dataid").toString();
BO bo = new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("PROCESSID", processInstance.getId());
bo.set("USER_ID", user);
//bo.set("USERDEP", SDK.getORGAPI().getUser(user).getDepartmentId());
bo.set("DATAID", dataid);
bo.set("RESULT", status);
bo.set("SENDTYPE", "1");
bo.set("READSTATE", "未读");
bo.set("TYPE", type);
recordLists.add(bo);
BO oa_real_time=SDK.getBOAPI().query("BO_ACT_OA_REAL_TIME").addQuery("PROCESSID=",processInstance.getId()).detail();
String sqly = "SELECT ID FROM BO_ACT_DATAID WHERE PROCESSID = '" + processInstId + "' AND SENDTYPE = '1'";
List<RowMap> mapsy = DBSql.getMaps(sqly);
if(oa_real_time!=null){
int r1 = DBSql.update("UPDATE BO_ACT_OA_REAL_TIME SET SENDNUMSJ='" + mapsy.size() + "'WHERE PROCESSID ='" + processInstance.getId() + "'");
}else{
//插入实时更新人数表
BO realTimeBO=new BO();
realTimeBO.set("USREID", user);
realTimeBO.set("DEPID", SDK.getORGAPI().getUser(user).getDepartmentId());
realTimeBO.set("BUNAME",SDK.getORGAPI().getUser(user).getExt4());
realTimeBO.set("TITLE", processInstance.getTitle());
realTimeBO.set("PROCESSID", processInstance.getId());
realTimeBO.set("SENDNUMSJ", 1);
realTimeBO.set("SENDNUM",sendTotal);
SDK.getBOAPI().create("BO_ACT_OA_REAL_TIME", bo, processInstance, UserContext.fromUID(processInstance.getCreateUser()));
}
}
SDK.getBOAPI().create("BO_ACT_DATAID",recordLists, processInstance, UserContext.fromUID(processInstance.getCreateUser()));
long endTime2 = System.currentTimeMillis();
System.err.println(processInstance.getTitle() + "批量插入OA待阅数据====>" + "用时:"
+ (endTime2 - startTime2) / 1000 + "");
}
long set_end_time = System.currentTimeMillis();
bo_OA_read.set("SET_END_TIME",set_end_time);
bo_OA_read.set("SET_SUM_TIME",(set_end_time-set_start_time));
bo_OA_read.set("PROCESS_ID",processInstance.getId());
SDK.getBOAPI().create("BO_EU_OA_READ_LOG", bo_OA_read, processInstance, UserContext.fromUID(processInstance.getCreateUser()));
if("单个账号推送".equals(type)) {
DBSql.update("UPDATE BO_EU_READ_COUNT SET RESULT = '已重新推送' WHERE PROCESSID = '"+processInstId+"' AND NAME = '"+resrt+"'");
}
} else {
List<String> idList = Arrays.asList(resrt);
BO bo = null;
List<BO> recordFailLists = new ArrayList<BO>();
if(idList.size()>0){
for (String userId : idList) {
System.out.println(processInstance.getTitle() + "待阅推送失败:" + userId);
try {
bo= new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("NAME", userId);
bo.set("TYPE", type);
bo.set("RESULT", "待处理");
bo.set("PROCESSID", processInstId);
bo.set("DEPNAME", SDK.getORGAPI().getUser(userId).getDepartmentId());
//SDK.getBOAPI().create("BO_EU_READ_COUNT", bo, processInstance.getId(), processInstance.getCreateUser());
recordFailLists.add(bo);
} catch (Exception e) {
bo= new BO();
bo.set("TITLE", processInstance.getTitle());
bo.set("NAME", userIds);
bo.set("TYPE", type);
bo.set("RESULT", "待处理");
bo.set("PROCESSID", processInstId);
bo.set("DEPNAME", SDK.getORGAPI().getUser(userIds).getDepartmentId());
//SDK.getBOAPI().create("BO_EU_READ_COUNT", bo, processInstance.getId(), processInstance.getCreateUser());
recordFailLists.add(bo);
}
}
System.out.println("recordFailLists========="+recordFailLists.size());
SDK.getBOAPI().create("BO_EU_READ_COUNT", recordFailLists, processInstance, UserContext.fromUID(processInstance.getCreateUser()));
}
}
}
public ArrayList<String> getSendList(ProcessInstance instanceById, BO bo_act_coe_publish1, JSONObject jsonObject) { public ArrayList<String> getSendList(ProcessInstance instanceById, BO bo_act_coe_publish1, JSONObject jsonObject) {
String sendType = bo_act_coe_publish1.getString("SEND_SCOP"); String sendType = bo_act_coe_publish1.getString("SEND_SCOP");
String org = bo_act_coe_publish1.getString("SEND_SCOPE_ORG"); String org = bo_act_coe_publish1.getString("SEND_SCOPE_ORG");