Compare commits
	
		
			2 Commits
		
	
	
		
			534cffe31f
			...
			85fcb27194
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 85fcb27194 | |
|  | 370548280e | 
|  | @ -0,0 +1,256 @@ | |||
| package tqq9.lc123.cloud.app.plugin.utils; | ||||
| 
 | ||||
| import com.alibaba.fastjson.JSON; | ||||
| import kd.bos.data.BusinessDataReader; | ||||
| import kd.bos.dataentity.entity.DynamicObject; | ||||
| import kd.bos.dataentity.entity.LocaleString; | ||||
| import kd.bos.dataentity.metadata.IDataEntityType; | ||||
| import kd.bos.dataentity.resource.ResManager; | ||||
| import kd.bos.dataentity.utils.StringUtils; | ||||
| import kd.bos.entity.EntityMetadataCache; | ||||
| import kd.bos.entity.LinkSetElement; | ||||
| import kd.bos.entity.LinkSetItemElement; | ||||
| import kd.bos.entity.MainEntityType; | ||||
| import kd.bos.entity.botp.LinkRecordType; | ||||
| import kd.bos.entity.botp.runtime.ConvertOperationResult; | ||||
| import kd.bos.entity.botp.runtime.PushArgs; | ||||
| import kd.bos.entity.botp.runtime.SourceBillReport; | ||||
| import kd.bos.entity.datamodel.IRefrencedataProvider; | ||||
| import kd.bos.entity.datamodel.ListSelectedRow; | ||||
| import kd.bos.exception.KDBizException; | ||||
| import kd.bos.isv.ISVService; | ||||
| import kd.bos.metadata.botp.ConvertRuleMetadata; | ||||
| import kd.bos.metadata.botp.ConvertRuleTemplate; | ||||
| import kd.bos.servicehelper.botp.ConvertMetaServiceHelper; | ||||
| import kd.bos.servicehelper.botp.ConvertServiceHelper; | ||||
| 
 | ||||
| import java.util.*; | ||||
| 
 | ||||
| /** | ||||
|  * BOTP代码生成工具类 | ||||
|  */ | ||||
| public class BotpParamUtils { | ||||
| 
 | ||||
|     public static PushArgs getPushArgs(String srcEntityNumber, String targetEntityNumber, Map<String, Object> param, List<Long> pkids)  throws KDBizException { | ||||
|         return getPushArgs(srcEntityNumber, targetEntityNumber, param, pkids, ""); | ||||
|     } | ||||
| 
 | ||||
|     public static PushArgs getPushArgs(String srcEntityNumber, String targetEntityNumber, Map<String, Object> param, List<Long> pkids, String rule) { | ||||
|         PushArgs pushArgs = new PushArgs(); | ||||
|         pushArgs.setSourceEntityNumber(srcEntityNumber);		// 必选,源单标识 | ||||
|         pushArgs.setTargetEntityNumber(targetEntityNumber);		// 必选,目标单标识 | ||||
|         pushArgs.setHasRight(true);		// 可选,传入true,不检查目标单新增权 | ||||
|         pushArgs.setAppId("");				// 可选,传入目标单验权使用的应用编码 | ||||
|         pushArgs.setDefOrgId(0L);			// 可选,传入目标单主组织默认值 | ||||
|         pushArgs.setRuleId(rule);				// 可选,传入本次下推使用的转换规则id;传入空值,由系统自动寻找合适的转换规则 | ||||
|         pushArgs.setBuildConvReport(true);	// 是否输出详细错误报告 | ||||
| 
 | ||||
|         //传递参数 | ||||
|         if(param != null) { | ||||
|             for(Map.Entry<String, Object> obj : param.entrySet()) { | ||||
|                 pushArgs.addCustomParam(obj.getKey(), JSON.toJSONString(obj.getValue())); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         //原单单据id | ||||
|         List<ListSelectedRow> selectRows = new ArrayList<>(); | ||||
|         for(Long pkid : pkids) { | ||||
|             ListSelectedRow row = new ListSelectedRow(pkid); | ||||
|             selectRows.add(row); | ||||
|         } | ||||
|         pushArgs.setSelectedRows(selectRows); | ||||
|         return pushArgs; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 按分录下推 | ||||
|      * @param srcEntityNumber 源单标识 | ||||
|      * @param targetEntityNumber 目标标识 | ||||
|      * @param srcEntryEntity 源单分录标识 | ||||
|      * @param param 参数 | ||||
|      * @param entitypkMap 源单分录id | ||||
|      * @param rule 转换规则id | ||||
|      * @return | ||||
|      * @throws KDBizException | ||||
|      */ | ||||
|     public static PushArgs getPushArgs(String srcEntityNumber, String targetEntityNumber, String srcEntryEntity, | ||||
|                                        Map<String, String> param, HashMap<Long,Long> entitypkMap, String rule)  throws KDBizException{ | ||||
|         PushArgs pushArgs = new PushArgs(); | ||||
|         pushArgs.setSourceEntityNumber(srcEntityNumber);		// 必选,源单标识 | ||||
|         pushArgs.setTargetEntityNumber(targetEntityNumber);		// 必选,目标单标识 | ||||
|         pushArgs.setHasRight(true);		// 可选,传入true,不检查目标单新增权 | ||||
|         pushArgs.setAppId("");				// 可选,传入目标单验权使用的应用编码 | ||||
|         pushArgs.setDefOrgId(0L);			// 可选,传入目标单主组织默认值 | ||||
|         pushArgs.setRuleId(rule);	// 可选,传入本次下推使用的转换规则id;传入空值,由系统自动寻找合适的转换规则 | ||||
|         pushArgs.setBuildConvReport(true);	// 是否输出详细错误报告 | ||||
| 
 | ||||
|         //传递参数 | ||||
|         if(param != null) { | ||||
|             for(Map.Entry<String, String> obj : param.entrySet()) { | ||||
|                 pushArgs.getCustomParams().put(obj.getKey(), obj.getValue()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         //原单单据id | ||||
|         ArrayList<ListSelectedRow> auditResult = new ArrayList<ListSelectedRow>(); | ||||
|         for (Map.Entry<Long, Long> entry : entitypkMap.entrySet()) { | ||||
|             ListSelectedRow row = new ListSelectedRow(); | ||||
|             row.setPrimaryKeyValue(entry.getKey()); | ||||
|             row.setEntryEntityKey(srcEntryEntity); | ||||
|             row.setEntryPrimaryKeyValue(entry.getValue()); | ||||
|             auditResult.add(row);        } | ||||
| 
 | ||||
|         pushArgs.setSelectedRows(auditResult); | ||||
|         return pushArgs; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 通过BOTP生成目标对象并返回 | ||||
|      * @param srcEntityNumber | ||||
|      * @param targetEntityNumber | ||||
|      * @param pkids | ||||
|      * @return | ||||
|      */ | ||||
|     public static List<DynamicObject> getDestObject(String srcEntityNumber, String targetEntityNumber, List<Long> pkids) throws KDBizException{ | ||||
|         PushArgs pushArgs = getPushArgs(srcEntityNumber,targetEntityNumber,null, pkids); | ||||
|         return getDestObject(pushArgs); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 根据下推参数返回,目标单对象(new) | ||||
|      * @param pushArgs | ||||
|      * @return | ||||
|      */ | ||||
|     public static List<DynamicObject> getDestObject(PushArgs pushArgs){ | ||||
|         // 调用下推引擎,下推目标单 | ||||
|         ConvertOperationResult pushResult = ConvertServiceHelper.push(pushArgs); | ||||
|         // 判断下推是否成功,如果失败,提炼失败消息输出 | ||||
|         if (!pushResult.isSuccess()) { | ||||
|             // 错误摘要 | ||||
|             String errMessage = pushResult.getMessage(); | ||||
|             throw new KDBizException(ResManager.loadKDString("下推失败:", "SchemeEngineService_1", "node-debug-mservice_test") + errMessage); | ||||
|         } | ||||
| 
 | ||||
|         // 获取生成的目标单数据包 | ||||
|         MainEntityType targetMainType = EntityMetadataCache.getDataEntityType(pushArgs.getTargetEntityNumber()); | ||||
|         List<DynamicObject> targetBillObjs = pushResult.loadTargetDataObjects(new IRefrencedataProvider() { | ||||
|             @Override | ||||
|             public void fillReferenceData(Object[] objs, IDataEntityType dType) { | ||||
|                 BusinessDataReader.loadRefence(objs, dType); | ||||
|             } | ||||
|         }, targetMainType); | ||||
|         return targetBillObjs; | ||||
|     } | ||||
|     /** | ||||
|      * 获取下推之后的返回结果 | ||||
|      * @param pushArgs | ||||
|      * @return | ||||
|      */ | ||||
|     public static ConvertOperationResult getPushResult(PushArgs pushArgs)  throws KDBizException{ | ||||
|         // 调用下推引擎,下推目标单 | ||||
|         ConvertOperationResult pushResult = ConvertServiceHelper.push(pushArgs); | ||||
| 
 | ||||
|         // 判断下推是否成功,如果失败,提炼失败消息输出 | ||||
|         if (!pushResult.isSuccess()) { | ||||
|             String errMessage = pushResult.getMessage();	// 错误摘要 | ||||
|             for(SourceBillReport billReport : pushResult.getBillReports()) { | ||||
|                 // 演示如何提取各单错误报告 | ||||
|                 if (!billReport.isSuccess()) { | ||||
|                     String billMessage = billReport.getFailMessage(); | ||||
|                 } | ||||
|             } | ||||
|             throw new KDBizException("下推失败:" + errMessage); | ||||
|         } | ||||
| 
 | ||||
|         return pushResult; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 后台下推完成,不考虑展示目标单据界面 | ||||
|      * @param srcEntityNumber:源单标识 | ||||
|      * @param targetEntityNumber:目标单表 | ||||
|      * @param param:参数 | ||||
|      * @param pkids:下推单据id | ||||
|      * @return | ||||
|      */ | ||||
|     public static Boolean getBotpSuccess(String srcEntityNumber, String targetEntityNumber, Map<String, Object> param, List<Long> pkids)  throws KDBizException{ | ||||
|         PushArgs pushArgs = getPushArgs(srcEntityNumber, targetEntityNumber, param, pkids); | ||||
| 
 | ||||
|         // 调用下推引擎,下推目标单 | ||||
|         ConvertOperationResult pushResult = ConvertServiceHelper.push(pushArgs); | ||||
| 
 | ||||
|         // 判断下推是否成功,如果失败,提炼失败消息输出 | ||||
|         if (!pushResult.isSuccess()) { | ||||
|             String errMessage = pushResult.getMessage();	// 错误摘要 | ||||
|             for(SourceBillReport billReport : pushResult.getBillReports()) { | ||||
|                 // 演示如何提取各单错误报告 | ||||
|                 if (!billReport.isSuccess()) { | ||||
|                     String billMessage = billReport.getFailMessage(); | ||||
|                 } | ||||
|             } | ||||
|             throw new KDBizException("下推失败:" + errMessage); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 获取指定:装换规则id | ||||
|      * @param srcEntityNumber:源单 | ||||
|      * @param targetEntityNumber:目标单 | ||||
|      * @param ruleName:规则名称 | ||||
|      * @return | ||||
|      */ | ||||
|     public static String getBotpRuleId(String srcEntityNumber,String targetEntityNumber,String ruleName) { | ||||
|         String ruleId = ""; | ||||
|         List<ConvertRuleMetadata> ruleMetadatas = loadMetas(srcEntityNumber, targetEntityNumber, true); | ||||
|         Iterator<ConvertRuleMetadata> rootRuleNode = ruleMetadatas.iterator(); | ||||
|         while(rootRuleNode.hasNext()) { | ||||
|             ConvertRuleMetadata rootNode = rootRuleNode.next(); | ||||
|             LocaleString name = rootNode.getRuleElement().getName(); //规则名称 | ||||
|             if(StringUtils.equals(name.toString(), ruleName)) { | ||||
|                 ruleId = rootNode.getRuleElement().getId(); | ||||
|             } | ||||
|         } | ||||
|         return ruleId; | ||||
|     } | ||||
| 
 | ||||
|     private static ConvertRuleMetadata createBlankRule(String sourceBill, String targetBill) { | ||||
|         ConvertRuleTemplate template = new ConvertRuleTemplate(); | ||||
|         ConvertRuleMetadata newRuleMeta = template.CreateBlankRule(); | ||||
|         newRuleMeta.getRuleElement().setSourceEntityNumber(sourceBill); | ||||
|         newRuleMeta.getRuleElement().setTargetEntityNumber(targetBill); | ||||
|         newRuleMeta.getRuleElement().setVisibled(true); | ||||
|         LinkSetElement linkSet; | ||||
|         if(StringUtils.isNotBlank(targetBill)) { | ||||
|             linkSet = ConvertMetaServiceHelper.loadLinkSet(targetBill); | ||||
|             if(linkSet != null && linkSet.getItems().size() > 0) { | ||||
|                 newRuleMeta.getRuleElement().getLinkEntityPolicy().setTargetEntryKey(((LinkSetItemElement)linkSet.getItems().get(0)).getParentEntityKey()); | ||||
|                 newRuleMeta.getRuleElement().getLinkEntityPolicy().setLinkRecordType(LinkRecordType.Link); | ||||
|             } | ||||
|         } | ||||
|         if(StringUtils.isNotBlank(sourceBill)) { | ||||
|             linkSet = ConvertMetaServiceHelper.loadLinkSet(sourceBill); | ||||
|             if(linkSet != null && linkSet.getItems().size() > 0) { | ||||
|                 newRuleMeta.getRuleElement().getLinkEntityPolicy().setSourceEntryKey(((LinkSetItemElement)linkSet.getItems().get(0)).getParentEntityKey()); | ||||
|             } | ||||
|         } | ||||
|         return newRuleMeta; | ||||
|     } | ||||
| 
 | ||||
|     private static List<ConvertRuleMetadata> loadMetas(String sourceBill, String targetBill, boolean autoCreateNew) { | ||||
|         List<ConvertRuleMetadata> ruleMetas = ConvertMetaServiceHelper.loadMetas(sourceBill, targetBill); | ||||
|         if(ruleMetas.isEmpty() && autoCreateNew) { | ||||
|             ConvertRuleMetadata newRuleMeta = createBlankRule(sourceBill, targetBill); | ||||
|             newRuleMeta.getRuleElement().setDefRule(true); | ||||
|             String currentIsv = ISVService.getISVInfo().getId(); | ||||
|             newRuleMeta.setIsv(currentIsv); | ||||
|             if(StringUtils.isNotBlank(sourceBill) && StringUtils.isNotBlank(targetBill)) { | ||||
|                 ConvertMetaServiceHelper.save(newRuleMeta); | ||||
|             } | ||||
|             ruleMetas.add(newRuleMeta); | ||||
|         } | ||||
|         return ruleMetas; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue