提交内容:推送星空电子回单整体代码优化

时间:2025-07-25 15:33
提交人:邹江涛
This commit is contained in:
zoujiangtao 2025-07-25 15:33:49 +08:00
parent 8530ae9da8
commit f7c4bc11a3
3 changed files with 130 additions and 124 deletions

View File

@ -328,7 +328,7 @@ public class ApiService {
logger.info("付款处理(支付结果) → BIP推送接口 → 成功\n成功单据编号{}\n成功请求体{}\n推送成功接口返回数据{}", logger.info("付款处理(支付结果) → BIP推送接口 → 成功\n成功单据编号{}\n成功请求体{}\n推送成功接口返回数据{}",
dynamic.getString("billno"), saveRequestBody, saveResponseBody); dynamic.getString("billno"), saveRequestBody, saveResponseBody);
result = "推送 → 付款处理(支付结果) → 成功,返回信息:"; result = "推送 → 付款处理(支付结果) → 成功,返回信息:" + JSON.parseObject(saveResponseBody).getString("message");
} else { } else {
// LogService.newLog("ERROR", "付款单(结算结果)", dynamic.getString("billno"), "付款处理(支付结果) → BIP推送接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据" + saveResponseBody); // LogService.newLog("ERROR", "付款单(结算结果)", dynamic.getString("billno"), "付款处理(支付结果) → BIP推送接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据" + saveResponseBody);
@ -1152,7 +1152,7 @@ public class ApiService {
} }
/** /**
* 推送星空单据附件 * 推送星空单据附件测试推送附件 此附件为API映射元数据的单据附件
* @param dataEntity API映射元数据对象 * @param dataEntity API映射元数据对象
* @return * @return
*/ */
@ -1225,4 +1225,82 @@ public class ApiService {
} }
return attachments; return attachments;
} }
/**
* 获取付款单收款单上划单下拨单关联的回单附件地址
*
* @param receiptNo 回单编号
* @param resultMap 回单信息
* @return
*/
public static void getReceipt(String receiptNo, Map<String, Object> resultMap) {
DynamicObject[] bei_elecreceipts = BusinessDataServiceHelper.load("bei_elecreceipt", "id,receiptno", new QFilter("receiptno", QCP.equals, receiptNo).toArray());
DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceipts[0].getPkValue(), bei_elecreceipts[0].getDynamicObjectType().getName());
IFormView viewByDynamicObj = createViewByDynamicObj(bei_elecreceipt);
List<String> errMsgList = new ArrayList<>();
DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," +
"fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," +
"bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())});
String pdfUrl = getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList);
Path path = Paths.get(bei_elecreceipt.getString("filepath"));
String upfileName = path.getFileName().toString();
resultMap.put("pdfUrl", pdfUrl);
resultMap.put("fileName", upfileName);
}
/**
* 推送星空回单附件
*
* @param dynamicObject 星瀚单据
* @param pdfUrl 星瀚回单附件地址
* @param fileName 星瀚回单附件名称
* @param resultMap 查询星空单据结果编码id
* @param k3CloudApi 星瀚接口访问实例对象
* @return
*/
public static String pushXkAttachment(DynamicObject dynamicObject, String pdfUrl, String fileName, Map<String, Object> resultMap, K3CloudApi k3CloudApi) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("FileName", fileName);// 文件名
String entityName = dynamicObject.getDataEntityType().getName();
if ("cas_paybill".equals(entityName)) {
jsonObject.put("FormId", "AP_PAYBILL");// 表单id付款处理 付款单AP_PAYBILL
} else if ("cas_recbill".equals(entityName)) {
jsonObject.put("FormId", "AR_RECEIVEBILL");// 表单id收款处理 收款单AR_RECEIVEBILL
} else if ("fca_transupbill".equals(entityName)) {
jsonObject.put("FormId", "AR_RECEIVEBILL");// 表单id上划处理 收款单AR_RECEIVEBILL
} else if ("fca_transdownbil".equals(entityName)) {
jsonObject.put("FormId", "AP_PAYBILL");// 表单id下拨处理 付款单AP_PAYBILL
}
jsonObject.put("IsLast", true);// 是否最后一次上传
jsonObject.put("InterId", resultMap.get("billId"));// 单据内码
jsonObject.put("BillNO", resultMap.get("billNumber"));// 单据编码
jsonObject.put("AliasFileName", fileName);// 附件别名
jsonObject.put("SendByte", attachmentBase64(pdfUrl));// 文件字节数组转base64后的字符串
String uploadAttachmentResult;
try {
uploadAttachmentResult = k3CloudApi.attachmentUpload(jsonObject.toString());
JSONObject resultJson = JSON.parseObject(uploadAttachmentResult);
JSONObject Result = resultJson.getJSONObject("Result");
JSONObject ResponseStatus = Result.getJSONObject("ResponseStatus");
Boolean isSuccess = ResponseStatus.getBoolean("IsSuccess");
if (isSuccess) {
logger.info(entityName + " → 电子回单推送星空成功,单据编码:" + dynamicObject.getString("billno") + "\n附件上传结果" + uploadAttachmentResult);
return entityName + " → 电子回单推送星空成功,单据编码:" + dynamicObject.getString("billno") +
" → 附件上传结果:" + uploadAttachmentResult;
} else {
logger.info(entityName + " → 电子回单推送星空失败,单据编码:" + dynamicObject.getString("billno") + "\n附件上传结果" + uploadAttachmentResult);
return entityName + " → 电子回单推送星空失败,单据编码:" + dynamicObject.getString("billno") +
" → 附件上传结果:" + uploadAttachmentResult;
}
} catch (Exception e) {
logger.info(entityName + " → 电子回单推送星空失败,单据编码:" + dynamicObject.getString("billno") + "\nk3CloudApi.attachmentUpload(jsonObject.toString())报错:" + e.getMessage());
return entityName + " → 电子回单推送星空失败,单据编码:" + dynamicObject.getString("billno") +
" → k3CloudApi.attachmentUpload(jsonObject.toString())报错:" + e.getMessage();
}
}
} }

View File

@ -3,7 +3,6 @@ package shkd.sys.sys.plugin.form;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.kingdee.bos.webapi.entity.IdentifyInfo;
import com.kingdee.bos.webapi.sdk.K3CloudApi; import com.kingdee.bos.webapi.sdk.K3CloudApi;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.DynamicObjectCollection;
@ -211,46 +210,38 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin {
} }
} }
// 查询上划单的回单编号 // 补偿推送星空电子回单
if ("shkd_upbill".equals(itemKey)) { // 补偿方案推送BIP电子回单
if ("shkd_compensatexk".equals(itemKey)) {
// 推送单据类型
String billMark = dataEntity.getDynamicObject("shkd_sourcebill").getString("number");
// 推送单据编码
String shkdSourcenumber = dataEntity.getString("shkd_sourcenumber"); String shkdSourcenumber = dataEntity.getString("shkd_sourcenumber");
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("fca_transupbill", "id,billno,name", new QFilter("billno", QCP.equals, shkdSourcenumber).toArray());
// 查询单据对象
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name", new QFilter("billno", QCP.equals, shkdSourcenumber).toArray());
// 获取k3cloudapi
K3CloudApi k3CloudApi = getK3CloudApi(dataEntity);
// 获取关联的回单编号
List<String> receiptNos = HandLinkBillHelper.getReceiptNoByDetails(dynamicObject, dynamicObject.getDataEntityType().getName()); List<String> receiptNos = HandLinkBillHelper.getReceiptNoByDetails(dynamicObject, dynamicObject.getDataEntityType().getName());
logger.info("上划单回单编号:{}", receiptNos);//电子回单号 logger.info(billMark + " → 关联回单编号:{}", receiptNos);//电子回单号
if (receiptNos.isEmpty()) {
DynamicObject[] bei_elecreceipts = BusinessDataServiceHelper.load("bei_elecreceipt", "id,receiptno", new QFilter("receiptno", QCP.equals, receiptNos.get(0)).toArray()); this.getView().showTipNotification("未查询到关联回单");
DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceipts[0].getPkValue(), bei_elecreceipts[0].getDynamicObjectType().getName()); } else {
IFormView viewByDynamicObj = createViewByDynamicObj(bei_elecreceipt); HashMap<String, Object> resultMap = getSKPushXKBill(dataEntity, billMark, dynamicObject.getString("billno"));
List<String> errMsgList = new ArrayList<>(); Map<String, Object> receiptResult = new HashMap<>();
DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," + // 获取回单
"fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," + getReceipt(receiptNos.get(0), receiptResult);
"bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())}); String pdfUrl = receiptResult.get("pdfUrl").toString();
String pdfUrl = getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList); String fileName = receiptResult.get("fileName").toString();
logger.info(billMark + "{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址{}", dynamicObject.getString("billno"), pdfUrl);
Path path = Paths.get(bei_elecreceipt.getString("filepath")); // 推送星空附件
String upfileName = path.getFileName().toString(); String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi);
this.getView().showTipNotification("上划单回单编号:" + receiptNos.get(0) + ",电子回单查询 → 获取pdf地址" + pdfUrl); this.getView().showTipNotification(result);
} }
// 查询下拨单的回单编号
if ("shkd_dowbill".equals(itemKey)) {
String shkdSourcenumber = dataEntity.getString("shkd_sourcenumber");
// 这个方法可以查询付款单收款单上划单下拨单关联的回单编号
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("fca_transdownbill", "id,billno,name", new QFilter("billno", QCP.equals, shkdSourcenumber).toArray());
List<String> receiptNos = HandLinkBillHelper.getReceiptNoByDetails(dynamicObject, dynamicObject.getDataEntityType().getName());
logger.info("下拨单回单编号:{}", receiptNos);
DynamicObject[] bei_elecreceipts = BusinessDataServiceHelper.load("bei_elecreceipt", "id,receiptno", new QFilter("receiptno", QCP.equals, receiptNos.get(0)).toArray());
DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceipts[0].getPkValue(), bei_elecreceipts[0].getDynamicObjectType().getName());
IFormView viewByDynamicObj = createViewByDynamicObj(bei_elecreceipt);
List<String> errMsgList = new ArrayList<>();
DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," +
"fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," +
"bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())});
String pdfUrl = getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList);
Path path = Paths.get(bei_elecreceipt.getString("filepath"));
String upfileName = path.getFileName().toString();
this.getView().showTipNotification("上划单回单编号:" + receiptNos.get(0) + ",电子回单查询 → 获取pdf地址" + pdfUrl);
} }
} }

View File

@ -1,31 +1,24 @@
package shkd.sys.sys.plugin.task; package shkd.sys.sys.plugin.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.kingdee.bos.qing.util.DateUtils; import com.kingdee.bos.qing.util.DateUtils;
import com.kingdee.bos.webapi.sdk.K3CloudApi; import com.kingdee.bos.webapi.sdk.K3CloudApi;
import kd.bos.context.RequestContext; import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.exception.KDException; import kd.bos.exception.KDException;
import kd.bos.form.IFormView;
import kd.bos.logging.Log; import kd.bos.logging.Log;
import kd.bos.logging.LogFactory; import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QCP; import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter; import kd.bos.orm.query.QFilter;
import kd.bos.schedule.executor.AbstractTask; import kd.bos.schedule.executor.AbstractTask;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import kd.tmc.fca.common.helper.HandLinkBillHelper; import kd.tmc.fca.common.helper.HandLinkBillHelper;
import shkd.sys.sys.mservice.ApiService; import shkd.sys.sys.mservice.ApiService;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.ParseException; import java.text.ParseException;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters; import java.time.temporal.TemporalAdjusters;
@ -308,7 +301,11 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
String fileName = receiptResult.get("fileName").toString(); String fileName = receiptResult.get("fileName").toString();
logger.info("付款单:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址{}", dynamicObject.getString("billno"), pdfUrl); logger.info("付款单:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址{}", dynamicObject.getString("billno"), pdfUrl);
// 推送星空附件 // 推送星空附件
pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi);
if (result.contains("推送星空成功")) {
dynamicObject.set("shkd_xkfilestatus", "已推送");
SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
}
} }
} }
@ -343,7 +340,11 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
String fileName = receiptResult.get("fileName").toString(); String fileName = receiptResult.get("fileName").toString();
logger.info("收款单:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址{}", dynamicObject.getString("billno"), pdfUrl); logger.info("收款单:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址{}", dynamicObject.getString("billno"), pdfUrl);
// 推送星空附件 // 推送星空附件
pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi);
if (result.contains("推送星空成功")) {
dynamicObject.set("shkd_xkfilestatus", "已推送");
SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
}
} }
} }
@ -375,7 +376,11 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
String fileName = receiptResult.get("fileName").toString(); String fileName = receiptResult.get("fileName").toString();
logger.info("上划处理:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址{}", dynamicObject.getString("billno"), pdfUrl); logger.info("上划处理:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址{}", dynamicObject.getString("billno"), pdfUrl);
// 推送星空附件 // 推送星空附件
pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi);
if (result.contains("推送星空成功")) {
dynamicObject.set("shkd_xkfilestatus", "已推送");
SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
}
} }
} }
@ -408,7 +413,11 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
String fileName = receiptResult.get("fileName").toString(); String fileName = receiptResult.get("fileName").toString();
logger.info("下拨处理:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址{}", dynamicObject.getString("billno"), pdfUrl); logger.info("下拨处理:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址{}", dynamicObject.getString("billno"), pdfUrl);
// 推送星空附件 // 推送星空附件
pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi);
if (result.contains("推送星空成功")) {
dynamicObject.set("shkd_xkfilestatus", "已推送");
SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
}
} }
} }
break; break;
@ -473,76 +482,4 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
return Date.from(firstDayOfMonth.atStartOfDay(DEFAULT_ZONE).toInstant()); return Date.from(firstDayOfMonth.atStartOfDay(DEFAULT_ZONE).toInstant());
} }
} }
/**
* 获取付款单收款单上划单下拨单关联的回单附件地址
*
* @param receiptNo 回单编号
* @param resultMap 回单信息
* @return
*/
private static void getReceipt(String receiptNo, Map<String, Object> resultMap) {
DynamicObject[] bei_elecreceipts = BusinessDataServiceHelper.load("bei_elecreceipt", "id,receiptno", new QFilter("receiptno", QCP.equals, receiptNo).toArray());
DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceipts[0].getPkValue(), bei_elecreceipts[0].getDynamicObjectType().getName());
IFormView viewByDynamicObj = createViewByDynamicObj(bei_elecreceipt);
List<String> errMsgList = new ArrayList<>();
DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," +
"fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," +
"bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())});
String pdfUrl = getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList);
Path path = Paths.get(bei_elecreceipt.getString("filepath"));
String upfileName = path.getFileName().toString();
resultMap.put("pdfUrl", pdfUrl);
resultMap.put("fileName", upfileName);
}
/**
* 推送星空回单附件
*
* @param dynamicObject 星瀚单据
* @param pdfUrl 星瀚回单附件地址
* @param fileName 星瀚回单附件名称
* @param resultMap 查询星空单据结果编码id
* @param k3CloudApi 星瀚接口访问实例对象
* @return
*/
private static void pushXkAttachment(DynamicObject dynamicObject, String pdfUrl, String fileName, Map<String, Object> resultMap, K3CloudApi k3CloudApi) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("FileName", fileName);// 文件名
String entityName = dynamicObject.getDataEntityType().getName();
if ("cas_paybill".equals(entityName)) {
jsonObject.put("FormId", "AP_PAYBILL");// 表单id付款处理 付款单AP_PAYBILL
} else if ("cas_recbill".equals(entityName)) {
jsonObject.put("FormId", "AR_RECEIVEBILL");// 表单id收款处理 收款单AR_RECEIVEBILL
} else if ("fca_transupbill".equals(entityName)) {
jsonObject.put("FormId", "AR_RECEIVEBILL");// 表单id上划处理 收款单AR_RECEIVEBILL
} else if ("fca_transdownbil".equals(entityName)) {
jsonObject.put("FormId", "AP_PAYBILL");// 表单id下拨处理 付款单AP_PAYBILL
}
jsonObject.put("IsLast", true);// 是否最后一次上传
jsonObject.put("InterId", resultMap.get("billId"));// 单据内码
jsonObject.put("BillNO", resultMap.get("billNumber"));// 单据编码
jsonObject.put("AliasFileName", fileName);// 附件别名
jsonObject.put("SendByte", attachmentBase64(pdfUrl));// 文件字节数组转base64后的字符串
String uploadAttachmentResult;
try {
uploadAttachmentResult = k3CloudApi.attachmentUpload(jsonObject.toString());
JSONObject resultJson = JSON.parseObject(uploadAttachmentResult);
JSONObject Result = resultJson.getJSONObject("Result");
JSONObject ResponseStatus = Result.getJSONObject("ResponseStatus");
Boolean isSuccess = ResponseStatus.getBoolean("IsSuccess");
if (isSuccess) {
dynamicObject.set("shkd_xkfilestatus", "已推送");
logger.info(entityName + " → 电子回单推送星空,单据编码:" + dynamicObject.getString("billno") + "\n附件上传结果" + uploadAttachmentResult);
SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} }