被动付款、收款入账反写SAP定时任务优化
This commit is contained in:
parent
1f3617008e
commit
8d29359138
|
|
@ -4,6 +4,8 @@ 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.logging.Log;
|
||||||
|
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;
|
||||||
|
|
@ -21,86 +23,69 @@ import java.util.*;
|
||||||
*/
|
*/
|
||||||
public class BeiIntelpayBillTask extends AbstractTask implements Plugin {
|
public class BeiIntelpayBillTask extends AbstractTask implements Plugin {
|
||||||
|
|
||||||
|
private final static Log logger = LogFactory.getLog(BeiIntelpayBillTask.class);
|
||||||
|
|
||||||
//付款处理
|
//付款处理
|
||||||
private static final String KEY_PAY="cas_paybill";
|
private static final String KEY_PAY = "cas_paybill";
|
||||||
//下拨处理
|
//下拨处理
|
||||||
private static final String KEY_DOWN="fca_transdownbill";
|
private static final String KEY_DOWN = "fca_transdownbill";
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
||||||
|
logger.info("========== 开始处理被动付款单凭证号回写任务 ==========");
|
||||||
// 查询条件:借方金额大于0且凭证号为空
|
// 查询条件:借方金额大于0且凭证号为空
|
||||||
QFilter q1 = new QFilter("debitamount", QCP.large_than, BigDecimal.ZERO);
|
QFilter q1 = new QFilter("debitamount", QCP.large_than, BigDecimal.ZERO);
|
||||||
QFilter q2 = new QFilter("shjh_credentialnums", QCP.equals, "");
|
QFilter q2 = new QFilter("shjh_credentialnums", QCP.equals, "");
|
||||||
|
|
||||||
// 加载需要处理的智能付款单
|
// 加载需要处理的智能付款单
|
||||||
DynamicObject[] beiIntelpays = BusinessDataServiceHelper.load("bei_intelpay",
|
DynamicObject[] beiIntelPays = BusinessDataServiceHelper.load("bei_intelpay",
|
||||||
"id,billno,shjh_credentialnums,recedbillentry,recedbillentry.e_recedbillnumber",
|
"id,billno,shjh_credentialnums,recedbillentry,recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber",
|
||||||
new QFilter[]{q1, q2});
|
new QFilter[]{q1, q2});
|
||||||
|
if (beiIntelPays != null) {
|
||||||
|
logger.info("共查询到 " + beiIntelPays.length + " 条需要处理的被动付款单");
|
||||||
// 用于批量保存
|
// 用于批量保存
|
||||||
List<DynamicObject> toSaveList = new ArrayList<>();
|
List<DynamicObject> toSaveList = new ArrayList<>();
|
||||||
|
for (DynamicObject beiIntelPay : beiIntelPays) {
|
||||||
for (DynamicObject beiIntelpay : beiIntelpays) {
|
String number = beiIntelPay.getString("recedbillentry.e_recedbillnumber");
|
||||||
|
if (number!=null && !"".equals(number)){
|
||||||
|
String billType = beiIntelPay.getString("recedbillentry.e_recedbilltype");
|
||||||
// 下查关联单据
|
// 下查关联单据
|
||||||
Map<String, HashSet<Long>> intelPayMap = BFTrackerServiceHelper.findTargetBills(
|
DynamicObject relevancyBill = BusinessDataServiceHelper.loadSingle(billType, new QFilter[]{new QFilter("billno", QCP.equals, number)});
|
||||||
"bei_intelpay",
|
if (relevancyBill != null) {
|
||||||
new Long[]{(Long) beiIntelpay.getPkValue()});
|
|
||||||
|
|
||||||
// 尝试从不同类型的关联单据中获取凭证号
|
// 尝试从不同类型的关联单据中获取凭证号
|
||||||
String credentialNum = findCredentialNum(intelPayMap);
|
String credentialNum = findCredentialNum(relevancyBill, billType);
|
||||||
|
logger.info(beiIntelPay.getString("billno")+"查询到 " + number + "关联到SAP号:"+credentialNum);
|
||||||
if (StringUtils.isNotEmpty(credentialNum)) {
|
if (StringUtils.isNotEmpty(credentialNum)) {
|
||||||
beiIntelpay.set("shjh_credentialnums", credentialNum);
|
beiIntelPay.set("shjh_credentialnums", credentialNum);
|
||||||
toSaveList.add(beiIntelpay);
|
toSaveList.add(beiIntelPay);
|
||||||
}else {
|
|
||||||
//从付款单关联交易明细信息匹配
|
|
||||||
String billno = beiIntelpay.getString("billno");
|
|
||||||
DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{new QFilter("bankcheckentity.edetailbillno", QCP.equals, billno)});
|
|
||||||
if (null !=paybill){
|
|
||||||
String credentialnum = paybill.getString("shjh_credentialnum");
|
|
||||||
if (null!=credentialnum){
|
|
||||||
beiIntelpay.set("shjh_credentialnums", credentialnum);
|
|
||||||
toSaveList.add(beiIntelpay);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 批量保存
|
// 批量保存
|
||||||
if (!toSaveList.isEmpty()) {
|
if (!toSaveList.isEmpty()) {
|
||||||
SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0]));
|
SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0]));
|
||||||
}
|
}
|
||||||
|
logger.info("========== 被动付款单凭证号回写任务处理完成 ==========");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从关联单据中查找凭证号
|
* 从关联单据中查找凭证号
|
||||||
*/
|
*/
|
||||||
private String findCredentialNum(Map<String, HashSet<Long>> intelPayMap) {
|
private String findCredentialNum(DynamicObject relevancyBill, String billType) {
|
||||||
// 定义查找顺序和对应的字段名
|
// 定义查找顺序和对应的字段名
|
||||||
Map<String, String> keyToFieldMap = new LinkedHashMap<>();
|
Map<String, String> keyToFieldMap = new LinkedHashMap<>();
|
||||||
keyToFieldMap.put(KEY_PAY, "shjh_credentialnum");
|
keyToFieldMap.put(KEY_PAY, "shjh_credentialnum");
|
||||||
keyToFieldMap.put(KEY_DOWN, "shjh_sappzh");
|
keyToFieldMap.put(KEY_DOWN, "shjh_sappzh");
|
||||||
|
|
||||||
|
|
||||||
// 按顺序查找
|
// 按顺序查找
|
||||||
for (Map.Entry<String, String> entry : keyToFieldMap.entrySet()) {
|
for (Map.Entry<String, String> entry : keyToFieldMap.entrySet()) {
|
||||||
String key = entry.getKey();
|
String key = entry.getKey();
|
||||||
String fieldName = entry.getValue();
|
String fieldName = entry.getValue();
|
||||||
|
if (billType.equals(key)) {
|
||||||
if (intelPayMap.containsKey(key)) {
|
return relevancyBill.getString(fieldName);
|
||||||
for (Long billId : intelPayMap.get(key)) {
|
|
||||||
DynamicObject bill = BusinessDataServiceHelper.loadSingle(billId, key);
|
|
||||||
if (bill != null) {
|
|
||||||
String credentialNum = bill.getString(fieldName);
|
|
||||||
if (StringUtils.isNotEmpty(credentialNum)) {
|
|
||||||
return credentialNum;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ package shjh.jhzj7.fi.fi.plugin.task;
|
||||||
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.exception.KDException;
|
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.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;
|
||||||
|
|
@ -11,6 +13,7 @@ import kd.bos.servicehelper.botp.BFTrackerServiceHelper;
|
||||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||||
import kd.bos.util.StringUtils;
|
import kd.bos.util.StringUtils;
|
||||||
import kd.sdk.plugin.Plugin;
|
import kd.sdk.plugin.Plugin;
|
||||||
|
import shjh.jhzj7.fi.fi.plugin.convert.ClaimConvertPlugin;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
@ -19,72 +22,69 @@ import java.util.*;
|
||||||
* 定时从付款单携带SAP付凭证单号至收款入账中心
|
* 定时从付款单携带SAP付凭证单号至收款入账中心
|
||||||
*/
|
*/
|
||||||
public class BeiIntelrecBillTask extends AbstractTask implements Plugin {
|
public class BeiIntelrecBillTask extends AbstractTask implements Plugin {
|
||||||
|
|
||||||
|
private final static Log logger = LogFactory.getLog(BeiIntelrecBillTask.class);
|
||||||
|
|
||||||
//收款处理
|
//收款处理
|
||||||
private static final String KEY_REC="cas_recbill";
|
private static final String KEY_REC="cas_recbill";
|
||||||
//上划处理
|
//上划处理
|
||||||
private static final String KEY_UP="fca_transupbill";
|
private static final String KEY_UP="fca_transupbill";
|
||||||
@Override
|
@Override
|
||||||
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
||||||
|
logger.info("========== 开始处理收款入账单凭证号回写任务 ==========");
|
||||||
// 查询条件:收款金额大于0且凭证号为空
|
// 查询条件:收款金额大于0且凭证号为空
|
||||||
QFilter q1 = new QFilter("creditamount", QCP.large_than, BigDecimal.ZERO);
|
QFilter q1 = new QFilter("creditamount", QCP.large_than, BigDecimal.ZERO);
|
||||||
QFilter q2 = new QFilter("shjh_credentialnums", QCP.equals, "");
|
QFilter q2 = new QFilter("shjh_credentialnums", QCP.equals, "");
|
||||||
|
|
||||||
// 加载需要处理的智能付款单
|
// 加载需要处理的智能付款单
|
||||||
DynamicObject[] beiIntelrecs = BusinessDataServiceHelper.load("bei_intelrec",
|
DynamicObject[] beiIntelRecs = BusinessDataServiceHelper.load("bei_intelrec",
|
||||||
"id,billno,shjh_credentialnums",
|
"id,billno,shjh_credentialnums,recedbillentry,recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber",
|
||||||
new QFilter[]{q1, q2});
|
new QFilter[]{q1, q2});
|
||||||
|
if (beiIntelRecs != null) {
|
||||||
|
logger.info("共查询到 " + beiIntelRecs.length + " 条需要处理的收款入账单");
|
||||||
// 用于批量保存
|
// 用于批量保存
|
||||||
List<DynamicObject> toSaveList = new ArrayList<>();
|
List<DynamicObject> toSaveList = new ArrayList<>();
|
||||||
|
for (DynamicObject beiIntelRec : beiIntelRecs) {
|
||||||
for (DynamicObject beiIntelrec : beiIntelrecs) {
|
String number = beiIntelRec.getString("recedbillentry.e_recedbillnumber");
|
||||||
|
if (number!=null && !"".equals(number)){
|
||||||
|
String billType = beiIntelRec.getString("recedbillentry.e_recedbilltype");
|
||||||
// 下查关联单据
|
// 下查关联单据
|
||||||
Map<String, HashSet<Long>> intelPayMap = BFTrackerServiceHelper.findTargetBills(
|
DynamicObject relevancyBill = BusinessDataServiceHelper.loadSingle(billType, new QFilter[]{new QFilter("billno", QCP.equals, number)});
|
||||||
"bei_intelrec",
|
if (relevancyBill != null) {
|
||||||
new Long[]{(Long) beiIntelrec.getPkValue()});
|
|
||||||
|
|
||||||
// 尝试从不同类型的关联单据中获取凭证号
|
// 尝试从不同类型的关联单据中获取凭证号
|
||||||
String credentialNum = findCredentialNum(intelPayMap);
|
String credentialNum = findCredentialNum(relevancyBill, billType);
|
||||||
|
logger.info(beiIntelRec.getString("billno")+"查询到 " + number + "关联到SAP号:"+credentialNum);
|
||||||
if (StringUtils.isNotEmpty(credentialNum)) {
|
if (StringUtils.isNotEmpty(credentialNum)) {
|
||||||
beiIntelrec.set("shjh_credentialnums", credentialNum);
|
beiIntelRec.set("shjh_credentialnums", credentialNum);
|
||||||
toSaveList.add(beiIntelrec);
|
toSaveList.add(beiIntelRec);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 批量保存
|
// 批量保存
|
||||||
if (!toSaveList.isEmpty()) {
|
if (!toSaveList.isEmpty()) {
|
||||||
SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0]));
|
SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0]));
|
||||||
}
|
}
|
||||||
|
logger.info("========== 收款入账单凭证号回写任务处理完成 ==========");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从关联单据中查找凭证号
|
* 从关联单据中查找凭证号
|
||||||
*/
|
*/
|
||||||
private String findCredentialNum(Map<String, HashSet<Long>> intelPayMap) {
|
private String findCredentialNum(DynamicObject relevancyBill, String billType) {
|
||||||
// 定义查找顺序和对应的字段名
|
// 定义查找顺序和对应的字段名
|
||||||
Map<String, String> keyToFieldMap = new LinkedHashMap<>();
|
Map<String, String> keyToFieldMap = new LinkedHashMap<>();
|
||||||
keyToFieldMap.put(KEY_REC, "shjh_vouchernum");
|
keyToFieldMap.put(KEY_REC, "shjh_vouchernum");
|
||||||
keyToFieldMap.put(KEY_UP, "shjh_sappzh");
|
keyToFieldMap.put(KEY_UP, "shjh_sappzh");
|
||||||
|
|
||||||
// 按顺序查找
|
// 按顺序查找
|
||||||
for (Map.Entry<String, String> entry : keyToFieldMap.entrySet()) {
|
for (Map.Entry<String, String> entry : keyToFieldMap.entrySet()) {
|
||||||
String key = entry.getKey();
|
String key = entry.getKey();
|
||||||
String fieldName = entry.getValue();
|
String fieldName = entry.getValue();
|
||||||
|
if (billType.equals(key)) {
|
||||||
if (intelPayMap.containsKey(key)) {
|
return relevancyBill.getString(fieldName);
|
||||||
for (Long billId : intelPayMap.get(key)) {
|
|
||||||
DynamicObject bill = BusinessDataServiceHelper.loadSingle(billId, key);
|
|
||||||
if (bill != null) {
|
|
||||||
String credentialNum = bill.getString(fieldName);
|
|
||||||
if (StringUtils.isNotEmpty(credentialNum)) {
|
|
||||||
return credentialNum;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue