被动付款、收款入账反写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"); | ||||||
|             Map<String, HashSet<Long>> intelPayMap = BFTrackerServiceHelper.findTargetBills( |                 if (number!=null && !"".equals(number)){ | ||||||
|                     "bei_intelpay", |                     String billType = beiIntelPay.getString("recedbillentry.e_recedbilltype"); | ||||||
|                     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); | ||||||
|             if (StringUtils.isNotEmpty(credentialNum)) { |                         logger.info(beiIntelPay.getString("billno")+"查询到 " + number + "关联到SAP号:"+credentialNum); | ||||||
|                 beiIntelpay.set("shjh_credentialnums", credentialNum); |                         if (StringUtils.isNotEmpty(credentialNum)) { | ||||||
|                 toSaveList.add(beiIntelpay); |                             beiIntelPay.set("shjh_credentialnums", credentialNum); | ||||||
|             }else { |                             toSaveList.add(beiIntelPay); | ||||||
|                 //从付款单关联交易明细信息匹配 |                         } | ||||||
|                 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()) { | ||||||
|         // 批量保存 |                 SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0])); | ||||||
|         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<>(); |         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"); | ||||||
|             Map<String, HashSet<Long>> intelPayMap = BFTrackerServiceHelper.findTargetBills( |                 if (number!=null && !"".equals(number)){ | ||||||
|                     "bei_intelrec", |                     String billType = beiIntelRec.getString("recedbillentry.e_recedbilltype"); | ||||||
|                     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); | ||||||
|             if (StringUtils.isNotEmpty(credentialNum)) { |                         logger.info(beiIntelRec.getString("billno")+"查询到 " + number + "关联到SAP号:"+credentialNum); | ||||||
|                 beiIntelrec.set("shjh_credentialnums", credentialNum); |                         if (StringUtils.isNotEmpty(credentialNum)) { | ||||||
|                 toSaveList.add(beiIntelrec); |                             beiIntelRec.set("shjh_credentialnums", credentialNum); | ||||||
|  |                             toSaveList.add(beiIntelRec); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |             // 批量保存 | ||||||
| 
 |             if (!toSaveList.isEmpty()) { | ||||||
|         // 批量保存 |                 SaveServiceHelper.save(toSaveList.toArray(new DynamicObject[0])); | ||||||
|         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<>(); |         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