待办提交自动退出,合同附件识别优化,OA供应商变更逻辑,待办驳回删除消息

This commit is contained in:
weiyunlong 2024-11-13 18:35:26 +08:00
parent 2e6044fc27
commit 4338215f30
5 changed files with 371 additions and 220 deletions

View File

@ -13,6 +13,7 @@ import kd.bos.entity.datamodel.events.IDataModelChangeListener;
import kd.bos.entity.property.BasedataProp;
import kd.bos.entity.property.EntryProp;
import kd.bos.entity.property.MulBasedataProp;
import kd.bos.fileservice.FileServiceFactory;
import kd.bos.form.*;
import kd.bos.form.control.AttachmentPanel;
import kd.bos.form.control.EntryGrid;
@ -27,6 +28,8 @@ import kd.bos.form.operate.FormOperate;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.list.ListFilterParameter;
import kd.bos.list.ListShowParameter;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.AttachmentDto;
@ -36,6 +39,7 @@ import kd.bos.servicehelper.operation.DeleteServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.bos.util.StringUtils;
import org.apache.poi.ss.usermodel.*;
import shkd.utils.DobeDWUtils;
import shkd.utils.OAUtils;
import org.apache.poi.ss.usermodel.Cell;
@ -46,7 +50,10 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import java.util.function.Predicate;
import java.util.regex.Pattern;
@ -60,7 +67,7 @@ import java.util.regex.Pattern;
*/
public class ContractFormPlugin extends AbstractFormPlugin implements UploadListener, BasedataEditListener, IDataModelChangeListener {
private static final Log logger = LogFactory.getLog(ContractFormPlugin.class);
private static final String BASEDATA_FIELD = "multitypepartya";
@ -240,177 +247,157 @@ public class ContractFormPlugin extends AbstractFormPlugin implements UploadLis
this.getView().showTipNotification("请先保存单据");
return;
}
AttachmentDto attachmentDto = AttachmentServiceHelper.getAttachmentInfoByAttPk(fileMap.get("attPkId"));
String fileUrl = attachmentDto.getResourcePath();//真实路径
List<Map<String, Object>> attachmentes = AttachmentServiceHelper.getAttachments("recon_contractbill", this.getModel().getValue("id"), "qeug_attachmentpanelap");
for (Map<String, Object> attachment : attachmentes) {
String url = attachment.get("url").toString();
try {
URLConnection urlConnection = new URL(url).openConnection();
InputStream in = urlConnection.getInputStream();
// FileInputStream in = new FileInputStream(fileUrl);
Workbook workbook = WorkbookFactory.create(in);
try {
FileInputStream in = new FileInputStream(fileUrl);
Workbook workbook = WorkbookFactory.create(in);
/**
* --------------------------------------明细------------------------------------------------
* 获取数据首行根据每个sheet页第一列属不属于数字判断
* 第一列不属于数字的行跳过
*/
// for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
// Sheet sheet = workbook.getSheetAt(sheetIndex);
// List<String[]> data = new ArrayList<>();
// String currentCategory = "";
// for (Row row : sheet) {
// if (isRowEmpty(row)) {
// continue;
// }
// Cell firstCell = row.getCell(0);
// if (firstCell!= null && firstCell.getCellType() == CellType.NUMERIC) {
// data.add(getRowData(row));
// } else {
// currentCategory = getCellValue(row.getCell(0));
// }
// }
// for (String[] row : data) {
// System.out.print(currentCategory + "\t");
// for (String cellValue : row) {
// System.out.print(cellValue + "\t");
// }
// System.out.println();
// }
// }
Map<String, BigDecimal> amounttotalMap = new HashMap<>();
for (Sheet sheet : workbook) {
int rowNum = 0;
// 获取总行数
int rowCountsheet = sheet.getPhysicalNumberOfRows();//总行数
for (Row cells : sheet) {
String billno = cells.getCell(0).toString();
//第一列属于数字
/**
* --------------------------------------明细------------------------------------------------
* 获取数据首行根据每个sheet页第一列属不属于数字判断
* 第一列不属于数字的行跳过
*/
Map<String, BigDecimal> amounttotalMap = new HashMap<>();
for (Sheet sheet : workbook) {
int rowNum = 0;
// 获取总行数
int rowCountsheet = sheet.getPhysicalNumberOfRows();//总行数
for (Row cells : sheet) {
String billno = cells.getCell(0).toString();
//第一列属于数字
Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$");
boolean matches = pattern.matcher(billno).matches();
if (matches) {
rowNum = cells.getRowNum();
break;
}
}
BigDecimal amounttotal =BigDecimal.ZERO;
for (int j = rowNum; j <= rowCountsheet - 1; j++) {
Row row = sheet.getRow(j);
//第一列断号
String seq = row.getCell(0).toString();
if (StringUtils.isEmpty(seq)) {
System.out.println();
continue;
}
//第一列不包含数字
boolean containsDigit = seq.matches(".*\\d.*");
if (!containsDigit) {
System.out.println();
continue;
}
//合同明细清单 qeug_contractsummarylist
// 存合同id,sheet名字
DynamicObject contractsummarylist = BusinessDataServiceHelper.newDynamicObject("qeug_contractsummarylist");
contractsummarylist.set("enable","1");//使用状态
contractsummarylist.set("status","A");//数据状态
contractsummarylist.set("qeug_contractid",this.getModel().getDataEntity().getPkValue().toString());//合同id
contractsummarylist.set("qeug_sheetname",sheet.getSheetName());//sheet名字
for (Cell cell : row) {
int columnIndex = cell.getColumnIndex();
switch (columnIndex){
case 0:
double num = Double.parseDouble(cell.toString());
int result = (int)num;
contractsummarylist.set("qeug_seq",String.valueOf(result));//序号
break;
case 1:
contractsummarylist.set("qeug_projectnumber",cell);//项目编码
break;
case 2:
contractsummarylist.set("qeug_projectname",cell);//项目名称
break;
case 3:
contractsummarylist.set("qeug_featuredescript",cell);//项目特征描述
break;
case 4:
contractsummarylist.set("qeug_engincontent",cell);//工程内容
break;
case 5:
contractsummarylist.set("qeug_unit",cell);//计量单位
break;
case 6:
if (StringUtils.isNotEmpty(cell.toString())) {
contractsummarylist.set("qeug_decimalqty",BigDecimal.valueOf(Double.parseDouble(cell.toString())));//工程量
}
break;
case 7:
if (StringUtils.isNotEmpty(cell.toString())) {
contractsummarylist.set("qeug_unitprice",BigDecimal.valueOf(Double.parseDouble(cell.toString())));//综合单价
}
break;
case 9:
if (StringUtils.isNotEmpty(cell.toString())) {
BigDecimal bigDecimal = BigDecimal.valueOf(Double.parseDouble(cell.toString()));
contractsummarylist.set("qeug_amounttotal",bigDecimal);//合计
amounttotal = amounttotal.add(bigDecimal);
}
break;
case 10:
if (StringUtils.isNotEmpty(cell.toString())) {
contractsummarylist.set("qeug_artificial",BigDecimal.valueOf(Double.parseDouble(cell.toString())));//人工费
}
break;
case 12:
if (StringUtils.isNotEmpty(cell.toString())) {
contractsummarylist.set("qeug_provisional",BigDecimal.valueOf(Double.parseDouble(cell.toString())));//材料及工程设备暂估价
}
break;
case 13:
if (StringUtils.isNotEmpty(cell.toString())) {
contractsummarylist.set("qeug_remarks",cell);//备注
}
break;
default:
break;
Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$");
boolean matches = pattern.matcher(billno).matches();
if (matches) {
rowNum = cells.getRowNum();
break;
}
}
SaveServiceHelper.save(new DynamicObject[]{contractsummarylist});
}
amounttotalMap.put(sheet.getSheetName(),amounttotal);//一个sheet一个总金额
BigDecimal amounttotal =BigDecimal.ZERO;
for (int j = rowNum; j <= rowCountsheet - 1; j++) {
Row row = sheet.getRow(j);
//第一列断号
String seq = row.getCell(0).toString();
if (StringUtils.isEmpty(seq)) {
System.out.println();
continue;
}
//第一列不包含数字
boolean containsDigit = seq.matches(".*\\d.*");
if (!containsDigit) {
System.out.println();
continue;
}
//合同明细清单 qeug_contractsummarylist
// 存合同id,sheet名字
DynamicObject contractsummarylist = BusinessDataServiceHelper.newDynamicObject("qeug_contractsummarylist");
contractsummarylist.set("enable","1");//使用状态
contractsummarylist.set("status","A");//数据状态
contractsummarylist.set("qeug_contractid",this.getModel().getDataEntity().getPkValue().toString());//合同id
contractsummarylist.set("qeug_sheetname",sheet.getSheetName());//sheet名字
for (Cell cell : row) {
int columnIndex = cell.getColumnIndex();
switch (columnIndex){
case 0:
double num = Double.parseDouble(cell.toString());
int result = (int)num;
contractsummarylist.set("qeug_seq",String.valueOf(result));//序号
break;
case 1:
contractsummarylist.set("qeug_projectnumber",cell);//项目编码
break;
case 2:
contractsummarylist.set("qeug_projectname",cell);//项目名称
break;
case 3:
contractsummarylist.set("qeug_featuredescript",cell);//项目特征描述
break;
case 4:
contractsummarylist.set("qeug_engincontent",cell);//工程内容
break;
case 5:
contractsummarylist.set("qeug_unit",cell);//计量单位
break;
case 6:
if (StringUtils.isNotEmpty(cell.toString())) {
contractsummarylist.set("qeug_decimalqty",BigDecimal.valueOf(Double.parseDouble(cell.toString())));//工程量
}
break;
case 7:
if (StringUtils.isNotEmpty(cell.toString())) {
contractsummarylist.set("qeug_unitprice",BigDecimal.valueOf(Double.parseDouble(cell.toString())));//综合单价
}
break;
case 9:
if (StringUtils.isNotEmpty(cell.toString())) {
BigDecimal bigDecimal = BigDecimal.valueOf(Double.parseDouble(cell.toString()));
contractsummarylist.set("qeug_amounttotal",bigDecimal);//合计
amounttotal = amounttotal.add(bigDecimal);
}
break;
case 10:
if (StringUtils.isNotEmpty(cell.toString())) {
contractsummarylist.set("qeug_artificial",BigDecimal.valueOf(Double.parseDouble(cell.toString())));//人工费
}
break;
case 12:
if (StringUtils.isNotEmpty(cell.toString())) {
contractsummarylist.set("qeug_provisional",BigDecimal.valueOf(Double.parseDouble(cell.toString())));//材料及工程设备暂估价
}
break;
case 13:
if (StringUtils.isNotEmpty(cell.toString())) {
contractsummarylist.set("qeug_remarks",cell);//备注
}
break;
default:
break;
}
}
SaveServiceHelper.save(new DynamicObject[]{contractsummarylist});
}
amounttotalMap.put(sheet.getSheetName(),amounttotal);//一个sheet一个总金额
// this.getView().showSuccessNotification("清单汇总识别--生产明细成功");
}
/**
* --------------------------------------汇总------------------------------------------------
*/
DynamicObjectCollection qeugInvoiceentryinfo = this.getView().getModel().getEntryEntity("qeug_invoiceentryinfo");
// 获取工作簿中所有的 Sheet 数量
int numberOfSheets = workbook.getNumberOfSheets();
// 遍历每个 Sheet 并输出其名称
for (int i = 0; i < numberOfSheets; i++) {
Sheet sheet = workbook.getSheetAt(i);
qeugInvoiceentryinfo.addNew();
this.getModel().setValue("qeug_seq", i+1,i);//序号
this.getModel().setValue("qeug_summarycontent", sheet.getSheetName(),i);//汇总内容
BigDecimal bigDecimal = amounttotalMap.get(sheet.getSheetName());
this.getModel().setValue("qeug_amount", bigDecimal,i);//金额()
this.getModel().setValue("qeug_isnew", false,i);//是否新增行
DynamicObject bd_currency = BusinessDataServiceHelper.loadSingle("bd_currency",
new QFilter[]{new QFilter("number", QCP.equals, "CNY")});
if (null != bd_currency) {
this.getModel().setValue("qeug_currencylist", bd_currency,i);//清单币别
}
/**
* --------------------------------------汇总------------------------------------------------
*/
DynamicObjectCollection qeugInvoiceentryinfo = this.getView().getModel().getEntryEntity("qeug_invoiceentryinfo");
// 获取工作簿中所有的 Sheet 数量
int numberOfSheets = workbook.getNumberOfSheets();
// 遍历每个 Sheet 并输出其名称
for (int i = 0; i < numberOfSheets; i++) {
Sheet sheet = workbook.getSheetAt(i);
qeugInvoiceentryinfo.addNew();
this.getModel().setValue("qeug_seq", i+1,i);//序号
this.getModel().setValue("qeug_summarycontent", sheet.getSheetName(),i);//汇总内容
BigDecimal bigDecimal = amounttotalMap.get(sheet.getSheetName());
this.getModel().setValue("qeug_amount", bigDecimal,i);//金额()
this.getModel().setValue("qeug_isnew", false,i);//是否新增行
DynamicObject bd_currency = BusinessDataServiceHelper.loadSingle("bd_currency",
new QFilter[]{new QFilter("number", QCP.equals, "CNY")});
if (null != bd_currency) {
this.getModel().setValue("qeug_currencylist", bd_currency,i);//清单币别
}
}
this.getView().updateView("qeug_invoiceentryinfo");
SaveServiceHelper.save(new DynamicObject[]{this.getView().getModel().getDataEntity()});
this.getView().showSuccessNotification("清单汇总识别成功");
} catch (IOException e) {
throw new RuntimeException(e);
}
this.getView().updateView("qeug_invoiceentryinfo");
SaveServiceHelper.save(new DynamicObject[]{this.getView().getModel().getDataEntity()});
this.getView().showSuccessNotification("清单汇总识别成功");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
break;
//下载清单模板

View File

@ -33,7 +33,7 @@ public class PushOASupplierOPPlugin extends AbstractOperationServicePlugIn {
private static final Log logger = LogFactory.getLog(PushOASupplierOPPlugin.class);
private static final String RESM_OFFICIAL_SUPPLIER = "resm_official_supplier";//正式供应商
public static final String RESM_OFFICIAL_SUPPLIER = "resm_official_supplier";//正式供应商
@Override
public void afterExecuteOperationTransaction(AfterOperationArgs e){
@ -44,11 +44,21 @@ public class PushOASupplierOPPlugin extends AbstractOperationServicePlugIn {
if ("audit".equals(operationKey)) {
for (DynamicObject dataEntity : e.getDataEntities()) {
String name = dataEntity.getDynamicObjectType().getName();
String supplierName = "";
DynamicObject supplier = null;
if ("resm_change_supplier".equals(name)) {
supplierName = dataEntity.getDynamicObject("supplier").getString("name");
supplier = dataEntity.getDynamicObject("supplier");
}else {
supplierName = dataEntity.getString("name");
supplier = dataEntity;
}
//获取token
String oaToken = OAUtils.getOaToken(dataEntity.getString("name"));
String oaToken = OAUtils.getOaToken(supplierName);
if (StringUtils.isNotEmpty(oaToken)) {
pushOASupplier(oaToken,dataEntity);
if (StringUtils.isNotEmpty(oaToken) && null != supplier) {
pushOASupplier(oaToken,supplier);
}
}
}
@ -65,7 +75,7 @@ public class PushOASupplierOPPlugin extends AbstractOperationServicePlugIn {
DynamicObject official_supplier = BusinessDataServiceHelper.loadSingle(RESM_OFFICIAL_SUPPLIER, new QFilter[]{q});
if (null != official_supplier) {
String code = official_supplier.getString("number");
String code = official_supplier.getString("qeug_oacode");
String name = official_supplier.getString("name");
String taxpayerid = official_supplier.getString("tx_register_no");
String shortname = official_supplier.getString("simplename");

View File

@ -0,0 +1,22 @@
package shkd.todotask;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.workflow.taskcenter.plugin.validate.IApprovalSubPlugin;
import shkd.utils.OAUtils;
import java.util.Map;
/**
* 待办提交关闭页面
*/
public class closeTaskPagePlugin implements IApprovalSubPlugin {
private static final Log logger = LogFactory.getLog(closeTaskPagePlugin.class);
@Override
public boolean executeClosePageAfterSubmitTask(boolean isPCShow, Map<String, Object> customParams) {
logger.info("进入页面关闭方法");
logger.info("进入页面关闭方法");
return false;
}
}

View File

@ -9,6 +9,7 @@ import kd.bos.util.StringUtils;
import kd.bos.workflow.engine.impl.persistence.entity.operationlog.OperationLogEntity;
import kd.bos.workflow.engine.msg.AbstractMessageServiceHandler;
import kd.bos.workflow.engine.msg.ctx.MessageContext;
import kd.bos.workflow.engine.msg.info.MessageInfo;
import kd.bos.workflow.engine.msg.info.ToDoInfo;
import kd.bos.workflow.service.WorkflowService;
import kd.bos.workflow.service.impl.ServiceFactory;
@ -66,6 +67,7 @@ public class todoZyTaskServiceHandler extends AbstractMessageServiceHandler {
}
//获取Url
String url = toDoInfo.getUrl(); // 链接
String url1 = toDoInfo.getUrl(); // 链接
try {
url = URLEncoder.encode(url, "UTF-8");
} catch (UnsupportedEncodingException e) {
@ -107,7 +109,9 @@ public class todoZyTaskServiceHandler extends AbstractMessageServiceHandler {
thirdPartyMap.put("startName",startName);
thirdPartyMap.put("createDateStr",createDateStr);
thirdPartyMap.put("url",url);
thirdPartyMap.put("url1",url1);
thirdPartyMap.put("billNo",billNo);
thirdPartyMap.put("startNumber",startNumber);//发起人
//推送OA待办新增接口
thirdParty(thirdPartyMap);
@ -122,24 +126,24 @@ public class todoZyTaskServiceHandler extends AbstractMessageServiceHandler {
//todo 待办推送第三方,节点审批通过或者驳回到某节点时都会进入(dealToDo)方法,代码如何判断该节点是驳回还是审批通过
//获取当前任务ID
Long taskId = messageContext.getTaskId();
// List<OperationLogEntity> operationLogByTaskId = ServiceFactory.getService(WorkflowService.class).getTaskService().getOperationLogByTaskId(taskId);
String decisionType = ServiceFactory.getService(WorkflowService.class).getTaskService().getOperationLogByTaskId(taskId).get(0).getDecisionType();
//获取任务步骤
Long executionId = messageContext.getExecutionId();
List<OperationLogEntity> operationLogByTaskId = ServiceFactory.getService(WorkflowService.class).getTaskService().getOperationLogByTaskId(taskId);
String decisionType = "";
if (operationLogByTaskId.size() > 0) {
decisionType = ServiceFactory.getService(WorkflowService.class).getTaskService().getOperationLogByTaskId(taskId).get(0).getDecisionType();
}else {
return;
}
String subState = "";
String subState = "0";
//驳回
if("reject".equals(decisionType)){
subState = "3";
}
//审批通过
else if ("approve".equals(decisionType)) {
subState = "0";
}
//获取流程实例ID
Long processInstanceId = messageContext.getProcessInstanceId();
//获取任务步骤
Long executionId = messageContext.getExecutionId(); // 节点ID
//获取单据编码
String billNo = messageContext.getBillNo();
@ -174,15 +178,15 @@ public class todoZyTaskServiceHandler extends AbstractMessageServiceHandler {
Long taskId = messageContext.getTaskId();
String decisionType = ServiceFactory.getService(WorkflowService.class).getTaskService().getOperationLogByTaskId(taskId).get(0).getDecisionType();
String subState = "";
//单据撤销
if("reject".equals(decisionType)){
subState = "2";
}
//终止流程
else if ("approve".equals(decisionType)) {
subState = "3";
}
String subState = "3";
// //单据撤销
// if("reject".equals(decisionType)){
// subState = "2";
// }
// //终止流程
// else if ("approve".equals(decisionType)) {
// subState = "3";
// }
//获取单据编码
String billNo = messageContext.getBillNo();
@ -202,7 +206,67 @@ public class todoZyTaskServiceHandler extends AbstractMessageServiceHandler {
updatePendingState(updateStateMap);
}
System.out.println("createToDo");
System.out.println("createToDo");
}
@Override
public void sendMessage(MessageContext messageContext, MessageInfo message) {
super.sendMessage(messageContext, message);
//获取单据编码
String billNo = messageContext.getBillNo();
//消息内容
String content = message.getContent();
//消息时间
Date createDate = messageContext.getCreateDate();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String createDateStr = sdf.format(createDate);
//获取当前任务ID
Long taskId = messageContext.getTaskId();
//获取审批人集合
List<DynamicObject> approvers = new ArrayList<>();
List<Long> userIds = message.getUserIds(); // 审批人ID集合
List<DynamicObject> approversLists = getApprovers(userIds, approvers);
//获取任务创建人
Long startUserId = messageContext.getStartUserId(); // 审批实例发起人id
DynamicObject startUser = BusinessDataServiceHelper.loadSingle(startUserId, "bos_user");
String startNumber = "";
String startName = "";
if (null != startUser) {
startNumber = startUser.getString("number");
startName = startUser.getString("name");
if (!userIds.contains(startUserId)) {
approversLists.add(startUser);//添加发起人到审批人集合_便于后续接口调用(用户绑定接口)
}
}
//获取Url
String url = message.getContentUrl(); // 链接
String url1 = message.getContentUrl(); // 链接
try {
url = URLEncoder.encode(url, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
url = "http://172.31.254.240:9090/seeyon/isc.do?method=ssoISC&toUrl=" + url;
//获取token
String oaToken = OAUtils.getOaToken(billNo);
if (StringUtils.isNotEmpty(oaToken)) {
HashMap<String, Object> thirdPartyMap = new HashMap<>();
thirdPartyMap.put("oaToken",oaToken);
thirdPartyMap.put("approversLists",approversLists);
thirdPartyMap.put("taskId",taskId);
thirdPartyMap.put("content",content);
thirdPartyMap.put("createDateStr",createDateStr);
thirdPartyMap.put("url",url);
thirdPartyMap.put("url1",url1);
thirdPartyMap.put("billNo",billNo);
thirdPartyMap.put("startNumber",startNumber);//发起人
//推送OA待办新增接口
thirdpartyMessage(thirdPartyMap);
}
}
}

View File

@ -5,6 +5,10 @@ import com.alibaba.fastjson.JSONObject;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.bos.util.HttpClientUtils;
import kd.bos.util.StringUtils;
@ -13,6 +17,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static shkd.repc.resm.opplugin.PushOASupplierOPPlugin.RESM_OFFICIAL_SUPPLIER;
import static shkd.repc.resm.opplugin.PushOASupplierOPPlugin.assembleBody;
/**
@ -23,23 +28,14 @@ import static shkd.repc.resm.opplugin.PushOASupplierOPPlugin.assembleBody;
public class OAUtils {
private static final Log logger = LogFactory.getLog(OAUtils.class);
public static final String oaUrl = System.getProperty("oaurl");//(测试环境外网地址)
// public static final String oaUrl = "http://172.31.254.240:9090";//本地(内网地址)
// public static final String oaUrl = System.getProperty("oaurl");//(测试环境外网地址)
public static final String oaUrl = "http://172.31.254.240:9090";//本地(内网地址)
//致远服务前获取token接口
public static String getOaToken(String billNo){
//String url = System.getProperty("efms.infcompany.url.ip");
//logger.info("url");
//致远服务前获取token接口
// String userName = "ICSTest";
// String password = "8f72e360-268e-41ba-9886-af9a802e4de3";
String userName = "JDtest";
String password = "235c78d7-03a6-4b32-8632-7b75a002276b";
// String oaUrl = System.getProperty("oaurl");
// String oaUrl = "http://172.31.254.240:9090";
String linkUrl = oaUrl +"/seeyon/rest/token";
//接口请求体
JSONObject linkBody = new JSONObject();
@ -83,28 +79,35 @@ public class OAUtils {
//组装请求体
// DynamicObject supplier = dataEntity.getDynamicObject("syssupplier");//系统供应商
// if (null != supplier) {
JSONObject customerBody = assembleBody(OAUtils.l(dataEntity.getPkValue()));
if (null != customerBody) {
String customerPostjson = null;
try {
customerPostjson = HttpClientUtils.postjson(customerUrl, customerHeader, customerBody.toJSONString());
JSONObject jsonObject = JSONObject.parseObject(customerPostjson);
JSONObject customerBody = assembleBody(OAUtils.l(dataEntity.getPkValue()));
if (customerBody != null) {
String customerPostjson = null;
boolean isSuccess = false; // 新增变量来标记成功状态
try {
customerPostjson = HttpClientUtils.postjson(customerUrl, customerHeader, customerBody.toJSONString());
JSONObject jsonObject = JSONObject.parseObject(customerPostjson);
if (!jsonObject.isEmpty()) {
String result = jsonObject.getString("success");
boolean success = "true".equals(result);
DobeDWUtils.saveLog(dataEntity.getString("name"),
"致远", customerBody.toJSONString(), customerPostjson,
success, "调用ICS新增/更新OA客户租户接口");
if (!jsonObject.isEmpty()) {
isSuccess = "true".equals(jsonObject.getString("success"));
if (isSuccess) {
String id = jsonObject.getString("id");
// 获取正式供应商
QFilter q = new QFilter("id", QCP.equals, dataEntity.getPkValue());
DynamicObject officialSupplier = BusinessDataServiceHelper.loadSingle(RESM_OFFICIAL_SUPPLIER, new QFilter[]{q});
if (officialSupplier != null) {
officialSupplier.set("qeug_oacode", id);
SaveServiceHelper.save(new DynamicObject[]{officialSupplier});
}
}
} catch (Exception ex) {
DobeDWUtils.saveLog(dataEntity.getString("name"),
"致远", customerBody.toJSONString(), customerPostjson,
false, "调用ICS新增/更新OA客户租户接口");
throw new RuntimeException(ex);
}
} catch (Exception ex) {
DobeDWUtils.saveLog(dataEntity.getString("name"), "致远", customerBody.toJSONString(), customerPostjson, false, "调用ICS新增/更新OA客户租户接口");
throw new RuntimeException(ex);
} finally {
// 日志记录放在 finally 中确保无论如何都会执行
DobeDWUtils.saveLog(dataEntity.getString("name"), "致远", customerBody.toJSONString(), customerPostjson, isSuccess, isSuccess ? "调用ICS更新OA客户租户接口" : "调用ICS新增OA客户租户接口");
}
}
// }
}
@ -197,11 +200,11 @@ public class OAUtils {
jsonObject.put("taskId", String.valueOf(thirdPartyMap.get("taskId")));//第三方待办主键保证唯一
jsonObject.put("registerCode", "3004");//系统注册编码
jsonObject.put("title", String.valueOf(thirdPartyMap.get("title")) );//待办标题
// jsonObject.put("thirdSenderId", startNumber);//第三方待办发起人主键
// jsonObject.put("thirdSenderId", String.valueOf(thirdPartyMap.get("startNumber")));//第三方待办发起人主键
jsonObject.put("thirdSenderId", "jdtest");//todo 第三方待办发起人主键
// jsonObject.put("senderName", String.valueOf(thirdPartyMap.get("startName")) );//第三方待办发起人姓名
jsonObject.put("senderName", "金蝶测试" );//todo 第三方待办发起人姓名
// jsonObject.put("thirdReceiverId", approver.getString("number"));//第三方待办接收人主键保证唯一
// jsonObject.put("thirdReceiverId", approver.getString("number"));//第三方待办接收人主键保证唯一
jsonObject.put("thirdReceiverId", "jdtest");//todo 第三方待办接收人主键保证唯一
jsonObject.put("creationDate", String.valueOf(thirdPartyMap.get("createDateStr")));//待办创建时间格式yyyy-MM-dd HH:mm:ss
jsonObject.put("state", "0");//状态0:未办理1:已办理
@ -225,7 +228,7 @@ public class OAUtils {
// 记录日志
logger.info(logMessage);
DobeDWUtils.saveLog(String.valueOf(thirdPartyMap.get("billNo")),
"致远", pendingsBody.toJSONString(), pendingPostjson,
"致远", pendingsBody.toJSONString()+"\n"+String.valueOf(thirdPartyMap.get("url1")), pendingPostjson,
result, "调用推送OA待办新增接口");
}
@ -296,6 +299,71 @@ public class OAUtils {
}
/**
* 金蝶系统推送OA待办新增
* @param thirdPartyMap 流程参数
*/
public static void thirdpartyMessage(HashMap<String, Object> thirdPartyMap){
// String oaUrl = System.getProperty("oaurl");
String messagesUrl = oaUrl + "/seeyon/rest/thirdpartyMessage/receive/messageList";
Map<String, String> messageHeader = new HashMap<>();
messageHeader.put("Content-Type", "application/json");
messageHeader.put("token", String.valueOf(thirdPartyMap.get("oaToken")));
//组装请求体
JSONObject messageBody = new JSONObject();
JSONArray messageList = new JSONArray();
//接口不支持接收人字段为多人,但接口支持批量 so 多人审批,遍历审批人集合,调用OA调待办接口
List<DynamicObject> approversLists = (List<DynamicObject>)thirdPartyMap.get("approversLists");
for (DynamicObject approver :approversLists ) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("thirdpartyMessageId", String.valueOf(thirdPartyMap.get("taskId")));//第三方待办主键保证唯一
jsonObject.put("thirdpartyRegisterCode", "3004");//系统注册编码
jsonObject.put("messageContent", String.valueOf(thirdPartyMap.get("content")) );//消息内容
// jsonObject.put("thirdpartySenderId", String.valueOf(thirdPartyMap.get("startNumber")));//第三方待办发起人主键
jsonObject.put("thirdpartySenderId", "jdtest");//todo 第三方待办发起人主键
// jsonObject.put("thirdpartyReceiverId", approver.getString("number"));//第三方待办接收人主键保证唯一
jsonObject.put("thirdpartyReceiverId", "jdtest");//todo 第三方待办接收人主键保证唯一
jsonObject.put("creation_date", String.valueOf(thirdPartyMap.get("createDateStr")));//待办创建时间格式yyyy-MM-dd HH:mm:ss
jsonObject.put("messageURL", String.valueOf(thirdPartyMap.get("url")));//PC端穿透链接
jsonObject.put("messageH5URL", "test");//移动端穿透链接
messageList.add(jsonObject);
}
messageBody.put("messages", messageList);
String pendingPostjson = null;
try {
// 发送POST请求并获取响应
pendingPostjson = HttpClientUtils.postjson(messagesUrl, messageHeader, messageBody.toJSONString());
JSONObject jsonObject = JSONObject.parseObject(pendingPostjson);
// 检查JSON对象是否为空
if (jsonObject != null && !jsonObject.isEmpty()) {
Boolean result = jsonObject.getBoolean("success");
String logMessage = result ? "金蝶系统推送OA消息成功" : "金蝶系统推送OA消息失败";
// 记录日志
logger.info(logMessage);
DobeDWUtils.saveLog(String.valueOf(thirdPartyMap.get("billNo")),
"致远", messageBody.toJSONString()+"\n"+String.valueOf(thirdPartyMap.get("url1")), pendingPostjson,
result, "调用推送OA消息接口");
}
logger.info("接口返回结果:\n{}", pendingPostjson);
} catch (Exception e) {
// 记录异常信息
String errorMessage = String.format("接口异常:%s", e.getMessage());
logger.info(errorMessage);
DobeDWUtils.saveLog(String.valueOf(thirdPartyMap.get("billNo")),
"致远", messageBody.toJSONString(), e.getMessage(),
false, "调用推送OA消息接口");
throw new RuntimeException(e);
}
}
/**