收款推送sap定时任务、收款推sap增加PO相关字段

This commit is contained in:
yuxueliang0813 2025-04-30 08:58:12 +08:00
parent df44b13e3d
commit efa767d3cf
3 changed files with 48 additions and 9 deletions

View File

@ -51,6 +51,8 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im
private static final String queryRealtion = "select fsid,fsbillid from tk_shjh_clear_account_tc where ftbillid=?;";//查看清账单与收款单的关联关系表
private static final String updateReceivBill = "update T_CAS_ReceivingBill set fk_shjh_qzzt=? where fid=?;";//收款单表头清账状态
//收款单分录已下推标记改为否
private static final String updateRecEntryPush = "update T_CAS_ReceivingBillEntry set fk_shjh_pushbill='0' where FEntryID in (select fsid from tk_shjh_clear_account_tc where ftbillid=?);";
private static final String entityName = "shjh_clear_acctdetail";//清账明细单
private static final String userName = "bos_user";//用户
@ -722,6 +724,9 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im
prinfo = dos[i];
DB.update(DBRoute.of("fi"), updateInvalidStatus, new Object[]{prinfo.getLong("id")});
DB.update(DBRoute.of("fi"), updateDetailStatusByBill, new Object[]{prinfo.getString("id")});
//反写上游收款单分录的已下推标记为否让收款单可以再次下推
DB.update(DBRoute.of("fi"), updateRecEntryPush, new Object[]{prinfo.getLong("id")});
//处理完成提示
this.operationResult.addSuccessPkId(prinfo.getPkValue());
}

View File

@ -179,6 +179,18 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl
}
}
// else{
// //如果是退预付款 103 则将入参中的PO号和PO行号字段设置值
// String poNumber = null;
// String poRowNumber = null;
// if(!recBill.getDynamicObjectCollection("entry").isEmpty()){
// poNumber = recBill.getDynamicObjectCollection("entry").get(0).getString("shjh_purchasenum");
// poRowNumber = recBill.getDynamicObjectCollection("entry").get(0).getString("shjh_purchaselinenum");
// }
// if(!JhzjUtils.isEmpty(poNumber)){
//
// }
// }
}
String type = recBill.getString(RecFieldsInfo.PAYER_TYPE);//付款人类型
long id = recBill.getLong("payer");//付款人id
@ -522,7 +534,6 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl
*/
private JSONObject createClearItem(DynamicObject entry, String customerNum, String supplierNum, BigDecimal clearAmount) {
JSONObject item = new JSONObject();
//公共字段设置
item.put("BUKRS", entry.getString("e_settleorg.number"));//公司代码-分录结算组织编号
item.put("BELNR", entry.getString("shjh_verificationnum"));//会计凭证编号-原预付款和借款单的凭证号
@ -541,6 +552,8 @@ public class RecPushVoucherOperation extends AbstractOperationServicePlugIn impl
item.put("DMBTR1", clearAmount != null ? clearAmount.toString() : "0"); // 清账金额
// item.put("DMBTR2", ""); // 剩余金额
// item.put("ERLKZ", ""); // 已完成的未清项标识符
item.put("EBELN", entry.getString("shjh_purchasenum"));//PO号-采购凭证号
item.put("EBELP", entry.getString("shjh_purchaselinenum"));//PO行号-采购凭证的项目编号
return item;
}

View File

@ -29,7 +29,7 @@ public class RecPushSapTask extends AbstractTask implements Plugin {
private final static Log logger = LogFactory.getLog(RecPushSapTask.class);
private static final String KEY_REC_BILL = "cas_recbill";//收款单实体标识
private static final String KEY_REC_BILL = "cas_recbill";//收款单实体标识 T_CAS_ReceivingBill
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
@ -60,13 +60,14 @@ public class RecPushSapTask extends AbstractTask implements Plugin {
// 配置操作选项共用
OperateOption operateOption = createStrictOperateOption();
// 并行处理两组数据
CompletableFuture<Void> normalFuture = processBillsAsync(normalBills, "pushvoucher", operateOption);
CompletableFuture<Void> redFuture = processBillsAsync(redBills, "redpunch", operateOption);
// 等待所有任务完成
CompletableFuture.allOf(normalFuture, redFuture).join();
//先处理负数红冲推送再处理正数推送
pushBills(redBills, "redpunch", operateOption);
pushBills(normalBills, "pushvoucher", operateOption);
//异步处理红冲和正数下推--由于不能异步故注释
// CompletableFuture<Void> redFuture = processBillsAsync(redBills, "redpunch", operateOption);
// CompletableFuture<Void> normalFuture = processBillsAsync(normalBills, "pushvoucher", operateOption);
// // 等待所有任务完成
// CompletableFuture.allOf(redFuture, normalFuture).join();
}
// 创建严格的操作选项
@ -79,6 +80,26 @@ public class RecPushSapTask extends AbstractTask implements Plugin {
return option;
}
//处理下推
private void pushBills(List<DynamicObject> bills, String operation, OperateOption option){
if (bills.isEmpty()){
return;
}
try {
DynamicObject[] billArray = bills.toArray(new DynamicObject[0]);
OperationResult result = OperationServiceHelper.executeOperate(operation, KEY_REC_BILL, billArray, option);
if (result.isSuccess()) {
logger.info(String.format("【%s】批量处理成功%d 张单据", operation, bills.size()));
} else {
logger.error(String.format("【%s】处理失败%s", operation, result.getMessage()));
// 可在此添加失败重试逻辑
}
} catch (Exception e) {
logger.error(String.format("【%s】执行异常", operation), e);
}
}
// 异步处理单据组
private CompletableFuture<Void> processBillsAsync(List<DynamicObject> bills, String operation, OperateOption option) {
return CompletableFuture.runAsync(() -> {