收款处理-SAP凭证定时任务
This commit is contained in:
parent
b00b5d1d10
commit
be5d81ec02
|
|
@ -19,6 +19,7 @@ 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.sdk.plugin.Plugin;
|
||||
import shjh.jhzj7.fi.fi.plugin.form.info.RecFieldsInfo;
|
||||
import shjh.jhzj7.fi.fi.utils.ApiUtils;
|
||||
|
|
@ -43,9 +44,6 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl
|
|||
|
||||
private final static Log logger = LogFactory.getLog(RecPushVoucherOperation.class);
|
||||
|
||||
private static final String INTERFACE_ID ="FinancialTransactionVoucher";//识别被调接口并进行路由-凭证推送
|
||||
|
||||
private static final String RECEIVER_ID ="SAP";//定义的发送者
|
||||
|
||||
/**
|
||||
* 操作标识
|
||||
|
|
@ -162,7 +160,14 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl
|
|||
data.put("IS_CUSTOMERCPD", getIS_CUSTOMERCPD(recBill));
|
||||
}
|
||||
}
|
||||
sap_accounVoucher(data,recBill.getString("billno"));
|
||||
JSONObject response = sap_accounVoucher(data, recBill.getString("billno"));
|
||||
if (null!=response){
|
||||
String code = (String) response.get("code");
|
||||
if ("0".equals(code)) {
|
||||
recBill.set("shjh_ispushsap",true);
|
||||
SaveServiceHelper.update(recBill);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -318,30 +323,128 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl
|
|||
}
|
||||
|
||||
/**
|
||||
* 收款清账凭证
|
||||
* @param recBill
|
||||
* @return
|
||||
* 生成收款清账凭证数据
|
||||
* @param recBill 收款单动态对象
|
||||
* @return 清账凭证数据JSON数组
|
||||
*/
|
||||
private JSONArray getIT_CLEAR(DynamicObject recBill){
|
||||
private JSONArray getIT_CLEAR(DynamicObject recBill) {
|
||||
JSONArray IT_CLEAR = new JSONArray();
|
||||
JSONObject IT_CLEARS = new JSONObject();
|
||||
IT_CLEARS.put("BUKRS",recBill.getString("org.number"));//公司代码
|
||||
IT_CLEARS.put("BELNR",recBill.getString("shjh_vouchernum"));//会计凭证编号
|
||||
IT_CLEARS.put("GJAHR",recBill.getString("shjh_sapfiscalyear"));//会计年度
|
||||
IT_CLEARS.put("BUZEI",recBill.getString("shjh_sapline"));//行编号
|
||||
IT_CLEARS.put("KUNNR","");//客户编号
|
||||
IT_CLEARS.put("LIFNR","");//供应商编号
|
||||
IT_CLEARS.put("HKONT","");//总账科目
|
||||
IT_CLEARS.put("UMSKZ","");//特殊总帐标识
|
||||
IT_CLEARS.put("DMBTR","");//未清金额
|
||||
IT_CLEARS.put("DMBTR1","");//清账金额
|
||||
IT_CLEARS.put("DMBTR2","");//剩余金额
|
||||
IT_CLEARS.put("ERLKZ","");//已完成的未清项标识符
|
||||
IT_CLEAR.add(IT_CLEARS);
|
||||
DynamicObjectCollection entries = recBill.getDynamicObjectCollection("entry");
|
||||
|
||||
if (entries == null || entries.isEmpty()) {
|
||||
return IT_CLEAR;
|
||||
}
|
||||
|
||||
// 获取收款人类型
|
||||
String payerType = recBill.getString(RecFieldsInfo.PAYER_TYPE);
|
||||
|
||||
// 根据不同类型处理逻辑
|
||||
switch (payerType) {
|
||||
case "bd_customer":
|
||||
handleCustomerEntries(recBill, entries, IT_CLEAR);
|
||||
break;
|
||||
case "bd_supplier":
|
||||
handleSupplierEntries(recBill, entries, IT_CLEAR);
|
||||
break;
|
||||
default:
|
||||
handleDefaultEntries(entries, IT_CLEAR);
|
||||
break;
|
||||
}
|
||||
|
||||
return IT_CLEAR;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理客户类型的清账条目
|
||||
*/
|
||||
private void handleCustomerEntries(DynamicObject recBill, DynamicObjectCollection entries, JSONArray IT_CLEAR) {
|
||||
String customerNum = "";
|
||||
|
||||
// 判断是否客户拆分
|
||||
if (recBill.getBoolean(RecFieldsInfo.CUSTOMER_SPLIT)) {
|
||||
// 处理拆分客户的分录
|
||||
for (DynamicObject entry : entries) {
|
||||
IT_CLEAR.add(createClearItem(
|
||||
entry,
|
||||
entry.getString("shjh_entrycustomer.number"), // 使用分录客户编号
|
||||
"", // 供应商编号为空
|
||||
entry.getBigDecimal("e_actamt")
|
||||
));
|
||||
}
|
||||
} else {
|
||||
// 处理非拆分客户的分录
|
||||
DynamicObject customer = BusinessDataServiceHelper.loadSingle(recBill.getLong("payer"), "bd_customer");
|
||||
customerNum = customer != null ? customer.getString("number") : "";
|
||||
|
||||
for (DynamicObject entry : entries) {
|
||||
IT_CLEAR.add(createClearItem(
|
||||
entry,
|
||||
customerNum, // 使用付款人客户编号
|
||||
"", // 供应商编号为空
|
||||
entry.getBigDecimal("e_actamt")
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理供应商类型的清账条目
|
||||
*/
|
||||
private void handleSupplierEntries(DynamicObject recBill, DynamicObjectCollection entries, JSONArray IT_CLEAR) {
|
||||
DynamicObject supplier = BusinessDataServiceHelper.loadSingle(recBill.getLong("payer"), "bd_supplier");
|
||||
String supplierNum = supplier != null ? supplier.getString("number") : "";
|
||||
|
||||
for (DynamicObject entry : entries) {
|
||||
IT_CLEAR.add(createClearItem(
|
||||
entry,
|
||||
"", // 客户编号为空
|
||||
supplierNum, // 使用供应商编号
|
||||
entry.getBigDecimal("e_actamt")
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理默认类型的清账条目
|
||||
*/
|
||||
private void handleDefaultEntries(DynamicObjectCollection entries, JSONArray IT_CLEAR) {
|
||||
for (DynamicObject entry : entries) {
|
||||
IT_CLEAR.add(createClearItem(
|
||||
entry,
|
||||
"", // 客户编号为空
|
||||
"", // 供应商编号为空
|
||||
entry.getBigDecimal("e_actamt")
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建清账条目JSON对象
|
||||
*/
|
||||
private JSONObject createClearItem(DynamicObject entry, String customerNum, String supplierNum, BigDecimal clearAmount) {
|
||||
JSONObject item = new JSONObject();
|
||||
|
||||
// 公共字段设置
|
||||
item.put("BUKRS", entry.getString("realreccompany.number")); // 公司代码
|
||||
item.put("BELNR", entry.getString("shjh_entryvouchernum")); // 会计凭证编号
|
||||
item.put("GJAHR", entry.getString("shjh_entryfiscalyear")); // 会计年度
|
||||
item.put("BUZEI", entry.getString("shjh_linenumber")); // 行编号
|
||||
item.put("HKONT", entry.getString("shjh_accountsap.number")); // 总账科目
|
||||
|
||||
// 客户/供应商编号
|
||||
item.put("KUNNR", customerNum);
|
||||
item.put("LIFNR", supplierNum);
|
||||
|
||||
// 金额相关字段
|
||||
item.put("UMSKZ", ""); // 特殊总帐标识
|
||||
item.put("DMBTR", ""); // 未清金额
|
||||
item.put("DMBTR1", clearAmount != null ? clearAmount.toString() : "0"); // 清账金额
|
||||
item.put("DMBTR2", ""); // 剩余金额
|
||||
item.put("ERLKZ", ""); // 已完成的未清项标识符
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
private JSONArray getIS_CUSTOMERCPD(DynamicObject recBill) {
|
||||
JSONArray IS_CUSTOMERCPD = new JSONArray();
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
package shjh.jhzj7.fi.fi.plugin.task;
|
||||
|
||||
import kd.bos.context.RequestContext;
|
||||
import kd.bos.dataentity.OperateOption;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.entity.operate.OperateOptionConst;
|
||||
import kd.bos.entity.operate.result.OperationResult;
|
||||
import kd.bos.exception.KDException;
|
||||
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.schedule.executor.AbstractTask;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.operation.OperationServiceHelper;
|
||||
import kd.sdk.plugin.Plugin;
|
||||
import shjh.jhzj7.fi.fi.plugin.form.info.RecFieldsInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 后台任务插件
|
||||
* 收款单自动推送SAP
|
||||
*/
|
||||
public class RecPushSapTask extends AbstractTask implements Plugin {
|
||||
|
||||
private final static Log logger = LogFactory.getLog(RecPushSapTask.class);
|
||||
|
||||
@Override
|
||||
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
||||
//收款、已生成金蝶凭证、未推送SAP
|
||||
QFilter qFilter = new QFilter("billstatus", QCP.equals, "D");
|
||||
qFilter.and(new QFilter("isvoucher", QCP.equals, true));
|
||||
qFilter.and(new QFilter("shjh_ispushsap", QCP.equals, false));
|
||||
|
||||
DynamicObject[] recBillList = BusinessDataServiceHelper.load("cas_recbill", "id", qFilter.toArray());
|
||||
|
||||
if (recBillList.length != 0) {
|
||||
ArrayList<Long> ids = new ArrayList<>();
|
||||
for (DynamicObject dynamicObject : recBillList) {
|
||||
ids.add(dynamicObject.getLong("id"));
|
||||
}
|
||||
|
||||
Map<Object, DynamicObject> recBillMap = BusinessDataServiceHelper.loadFromCache(ids.toArray(), "cas_recbill");
|
||||
|
||||
OperateOption operateOption = OperateOption.create();
|
||||
// 不执行警告级别校验器
|
||||
operateOption.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(true));
|
||||
// 不显示交互提示,自动执行到底
|
||||
operateOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, String.valueOf(true));
|
||||
// 全部校验通过才保存
|
||||
operateOption.setVariableValue(OperateOptionConst.STRICTVALIDATION, String.valueOf(true));
|
||||
//同一个用户在多个界面操作同一张,也不允许操作
|
||||
operateOption.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, String.valueOf(true));
|
||||
|
||||
// Convert map values to array for batch operation
|
||||
DynamicObject[] billArray = recBillMap.values().toArray(new DynamicObject[0]);
|
||||
|
||||
OperationResult operationResult = OperationServiceHelper.executeOperate("pushvoucher", "cas_recbill", billArray, operateOption);
|
||||
|
||||
if (operationResult.isSuccess()) {
|
||||
logger.info("执行 pushvoucher 成功,共处理 " + billArray.length + " 张单据");
|
||||
} else {
|
||||
logger.error("批量推送SAP失败: " + operationResult.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue