被动付款、收款入账反写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.DynamicObjectCollection; | ||||
| 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; | ||||
|  | @ -21,86 +23,69 @@ import java.util.*; | |||
|  */ | ||||
| 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 | ||||
|     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException { | ||||
|         logger.info("========== 开始处理被动付款单凭证号回写任务 =========="); | ||||
|         // 查询条件:借方金额大于0且凭证号为空 | ||||
|         QFilter q1 = new QFilter("debitamount", QCP.large_than, BigDecimal.ZERO); | ||||
|         QFilter q2 = new QFilter("shjh_credentialnums", QCP.equals, ""); | ||||
| 
 | ||||
|         // 加载需要处理的智能付款单 | ||||
|         DynamicObject[] beiIntelpays = BusinessDataServiceHelper.load("bei_intelpay", | ||||
|                 "id,billno,shjh_credentialnums,recedbillentry,recedbillentry.e_recedbillnumber", | ||||
|         DynamicObject[] beiIntelPays = BusinessDataServiceHelper.load("bei_intelpay", | ||||
|                 "id,billno,shjh_credentialnums,recedbillentry,recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber", | ||||
|                 new QFilter[]{q1, q2}); | ||||
| 
 | ||||
|         if (beiIntelPays != null) { | ||||
|             logger.info("共查询到 " + beiIntelPays.length + " 条需要处理的被动付款单"); | ||||
|             // 用于批量保存 | ||||
|             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( | ||||
|                     "bei_intelpay", | ||||
|                     new Long[]{(Long) beiIntelpay.getPkValue()}); | ||||
| 
 | ||||
|                     DynamicObject relevancyBill = BusinessDataServiceHelper.loadSingle(billType, new QFilter[]{new QFilter("billno", QCP.equals, number)}); | ||||
|                     if (relevancyBill != null) { | ||||
|                         // 尝试从不同类型的关联单据中获取凭证号 | ||||
|             String credentialNum = findCredentialNum(intelPayMap); | ||||
| 
 | ||||
|                         String credentialNum = findCredentialNum(relevancyBill, billType); | ||||
|                         logger.info(beiIntelPay.getString("billno")+"查询到 " + number + "关联到SAP号:"+credentialNum); | ||||
|                         if (StringUtils.isNotEmpty(credentialNum)) { | ||||
|                 beiIntelpay.set("shjh_credentialnums", credentialNum); | ||||
|                 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); | ||||
|                             beiIntelPay.set("shjh_credentialnums", credentialNum); | ||||
|                             toSaveList.add(beiIntelPay); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             // 批量保存 | ||||
|             if (!toSaveList.isEmpty()) { | ||||
|                 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<>(); | ||||
|         keyToFieldMap.put(KEY_PAY, "shjh_credentialnum"); | ||||
|         keyToFieldMap.put(KEY_DOWN, "shjh_sappzh"); | ||||
| 
 | ||||
| 
 | ||||
|         // 按顺序查找 | ||||
|         for (Map.Entry<String, String> entry : keyToFieldMap.entrySet()) { | ||||
|             String key = entry.getKey(); | ||||
|             String fieldName = entry.getValue(); | ||||
| 
 | ||||
|             if (intelPayMap.containsKey(key)) { | ||||
|                 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; | ||||
|             if (billType.equals(key)) { | ||||
|                 return relevancyBill.getString(fieldName); | ||||
|             } | ||||
|         } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return null; | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -3,6 +3,8 @@ package shjh.jhzj7.fi.fi.plugin.task; | |||
| import kd.bos.context.RequestContext; | ||||
| import kd.bos.dataentity.entity.DynamicObject; | ||||
| 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; | ||||
|  | @ -11,6 +13,7 @@ import kd.bos.servicehelper.botp.BFTrackerServiceHelper; | |||
| import kd.bos.servicehelper.operation.SaveServiceHelper; | ||||
| import kd.bos.util.StringUtils; | ||||
| import kd.sdk.plugin.Plugin; | ||||
| import shjh.jhzj7.fi.fi.plugin.convert.ClaimConvertPlugin; | ||||
| 
 | ||||
| import java.math.BigDecimal; | ||||
| import java.util.*; | ||||
|  | @ -19,72 +22,69 @@ import java.util.*; | |||
|  * 定时从付款单携带SAP付凭证单号至收款入账中心 | ||||
|  */ | ||||
| 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_UP="fca_transupbill"; | ||||
|     @Override | ||||
|     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException { | ||||
|         logger.info("========== 开始处理收款入账单凭证号回写任务 =========="); | ||||
|         // 查询条件:收款金额大于0且凭证号为空 | ||||
|         QFilter q1 = new QFilter("creditamount", QCP.large_than, BigDecimal.ZERO); | ||||
|         QFilter q2 = new QFilter("shjh_credentialnums", QCP.equals, ""); | ||||
| 
 | ||||
|         // 加载需要处理的智能付款单 | ||||
|         DynamicObject[] beiIntelrecs = BusinessDataServiceHelper.load("bei_intelrec", | ||||
|                 "id,billno,shjh_credentialnums", | ||||
|         DynamicObject[] beiIntelRecs = BusinessDataServiceHelper.load("bei_intelrec", | ||||
|                 "id,billno,shjh_credentialnums,recedbillentry,recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber", | ||||
|                 new QFilter[]{q1, q2}); | ||||
| 
 | ||||
|         if (beiIntelRecs != null) { | ||||
|             logger.info("共查询到 " + beiIntelRecs.length + " 条需要处理的收款入账单"); | ||||
|             // 用于批量保存 | ||||
|             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( | ||||
|                     "bei_intelrec", | ||||
|                     new Long[]{(Long) beiIntelrec.getPkValue()}); | ||||
| 
 | ||||
|                     DynamicObject relevancyBill = BusinessDataServiceHelper.loadSingle(billType, new QFilter[]{new QFilter("billno", QCP.equals, number)}); | ||||
|                     if (relevancyBill != null) { | ||||
|                         // 尝试从不同类型的关联单据中获取凭证号 | ||||
|             String credentialNum = findCredentialNum(intelPayMap); | ||||
| 
 | ||||
|                         String credentialNum = findCredentialNum(relevancyBill, billType); | ||||
|                         logger.info(beiIntelRec.getString("billno")+"查询到 " + number + "关联到SAP号:"+credentialNum); | ||||
|                         if (StringUtils.isNotEmpty(credentialNum)) { | ||||
|                 beiIntelrec.set("shjh_credentialnums", credentialNum); | ||||
|                 toSaveList.add(beiIntelrec); | ||||
|                             beiIntelRec.set("shjh_credentialnums", credentialNum); | ||||
|                             toSaveList.add(beiIntelRec); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             // 批量保存 | ||||
|             if (!toSaveList.isEmpty()) { | ||||
|                 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<>(); | ||||
|         keyToFieldMap.put(KEY_REC, "shjh_vouchernum"); | ||||
|         keyToFieldMap.put(KEY_UP, "shjh_sappzh"); | ||||
| 
 | ||||
|         // 按顺序查找 | ||||
|         for (Map.Entry<String, String> entry : keyToFieldMap.entrySet()) { | ||||
|             String key = entry.getKey(); | ||||
|             String fieldName = entry.getValue(); | ||||
| 
 | ||||
|             if (intelPayMap.containsKey(key)) { | ||||
|                 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; | ||||
|             if (billType.equals(key)) { | ||||
|                 return relevancyBill.getString(fieldName); | ||||
|             } | ||||
|         } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return null; | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue