|  | @@ -0,0 +1,323 @@
 | 
	
		
			
				|  |  | +package kd.fi.fa.business.cardgenerate;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import java.util.ArrayList;
 | 
	
		
			
				|  |  | +import java.util.HashMap;
 | 
	
		
			
				|  |  | +import java.util.HashSet;
 | 
	
		
			
				|  |  | +import java.util.Iterator;
 | 
	
		
			
				|  |  | +import java.util.List;
 | 
	
		
			
				|  |  | +import java.util.Map;
 | 
	
		
			
				|  |  | +import java.util.Set;
 | 
	
		
			
				|  |  | +import kd.bos.algo.DataSet;
 | 
	
		
			
				|  |  | +import kd.bos.algo.Row;
 | 
	
		
			
				|  |  | +import kd.bos.dataentity.OperateOption;
 | 
	
		
			
				|  |  | +import kd.bos.dataentity.entity.DynamicObject;
 | 
	
		
			
				|  |  | +import kd.bos.dataentity.entity.LocaleString;
 | 
	
		
			
				|  |  | +import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType;
 | 
	
		
			
				|  |  | +import kd.bos.dataentity.resource.ResManager;
 | 
	
		
			
				|  |  | +import kd.bos.entity.EntityMetadataCache;
 | 
	
		
			
				|  |  | +import kd.bos.entity.MainEntityType;
 | 
	
		
			
				|  |  | +import kd.bos.entity.operate.result.IOperateInfo;
 | 
	
		
			
				|  |  | +import kd.bos.entity.operate.result.OperationResult;
 | 
	
		
			
				|  |  | +import kd.bos.entity.property.EntryProp;
 | 
	
		
			
				|  |  | +import kd.bos.exception.KDBizException;
 | 
	
		
			
				|  |  | +import kd.bos.orm.query.QFilter;
 | 
	
		
			
				|  |  | +import kd.bos.orm.util.CollectionUtils;
 | 
	
		
			
				|  |  | +import kd.bos.servicehelper.BusinessDataServiceHelper;
 | 
	
		
			
				|  |  | +import kd.bos.servicehelper.DBServiceHelper;
 | 
	
		
			
				|  |  | +import kd.bos.servicehelper.QueryServiceHelper;
 | 
	
		
			
				|  |  | +import kd.bos.servicehelper.operation.OperationServiceHelper;
 | 
	
		
			
				|  |  | +import kd.bos.workflow.engine.impl.util.CollectionUtil;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.SourceFlagEnum;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.cardgenerate.impl.AbstractFinCardGenerate;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.cardgenerate.impl.AddCardToFinCardGenerate;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.cardgenerate.impl.AssetCardToFinCardGenerate;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.cardgenerate.impl.DispatchToFinCardGenerate;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.cardgenerate.impl.DispatchToRealCardGenerate;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.cardgenerate.impl.EngineeringToFinCardGenerate;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.cardgenerate.impl.InitLeaseContractToFinCardGenerate;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.cardgenerate.impl.InventoryProfitToFinCardGenerate;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.cardgenerate.impl.LeaseContractToFinCardGenerate;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.cardgenerate.impl.PurchaseToFinCardGenerate;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.errorcode.FinCardErrorCode;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.utils.FaCommonUtils;
 | 
	
		
			
				|  |  | +import kd.fi.fa.business.utils.FaUtils;
 | 
	
		
			
				|  |  | +import kd.fi.fa.common.util.Fa;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +public class CardGenerateHelperEx {
 | 
	
		
			
				|  |  | +    public CardGenerateHelperEx() {
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static final Object[] generateRealCard(DynamicObject srcBill) {
 | 
	
		
			
				|  |  | +        IRealCardGenerate generate = null;
 | 
	
		
			
				|  |  | +        DynamicObjectType dt = srcBill.getDynamicObjectType();
 | 
	
		
			
				|  |  | +        if (!"fa_dispatch_in".equals(dt.getName()) && !"fa_dispatch".equals(dt.getName())) {
 | 
	
		
			
				|  |  | +            throw new KDBizException(FinCardErrorCode.FINCARD_GENERATE_ERROR, new Object[0]);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            generate = new DispatchToRealCardGenerate(srcBill.getPkValue());
 | 
	
		
			
				|  |  | +            return generate.generateRealCard();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static void generateFinCard(List<DynamicObject> objects) {
 | 
	
		
			
				|  |  | +        MainEntityType finCardType = EntityMetadataCache.getDataEntityType("fa_card_fin");
 | 
	
		
			
				|  |  | +        DynamicObjectType billHeadType = ((EntryProp)finCardType.getProperty("billhead_lk")).getDynamicCollectionItemPropertyType();
 | 
	
		
			
				|  |  | +        Long realCardTableId = EntityMetadataCache.loadTableDefine("fa_card_real", "fa_card_real").getTableId();
 | 
	
		
			
				|  |  | +        AbstractFinCardGenerate generate = null;
 | 
	
		
			
				|  |  | +        List<DynamicObject> dynamicAdd = new ArrayList();
 | 
	
		
			
				|  |  | +        List<DynamicObject> dynamicPurchase = new ArrayList();
 | 
	
		
			
				|  |  | +        List<DynamicObject> dynamicDispatch = new ArrayList();
 | 
	
		
			
				|  |  | +        List<DynamicObject> dynamicInventory = new ArrayList();
 | 
	
		
			
				|  |  | +        List<DynamicObject> dynamicEnginner = new ArrayList();
 | 
	
		
			
				|  |  | +        List<DynamicObject> dynamicLease = new ArrayList();
 | 
	
		
			
				|  |  | +        List<DynamicObject> dynamicInitLease = new ArrayList();
 | 
	
		
			
				|  |  | +        List<DynamicObject> callbackFincards = new ArrayList();
 | 
	
		
			
				|  |  | +        Map<Object, DynamicObject[]> orgAssetBooksMap = getAssetBooksByOrg(objects);
 | 
	
		
			
				|  |  | +        Iterator var14 = objects.iterator();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        while(true) {
 | 
	
		
			
				|  |  | +            while(var14.hasNext()) {
 | 
	
		
			
				|  |  | +                DynamicObject dynamicObject = (DynamicObject)var14.next();
 | 
	
		
			
				|  |  | +                long realCardId = dynamicObject.getLong("id");
 | 
	
		
			
				|  |  | +                Object sourceFlag = dynamicObject.get("sourceflag");
 | 
	
		
			
				|  |  | +                boolean justrealcard = dynamicObject.getBoolean("justrealcard");
 | 
	
		
			
				|  |  | +                if (justrealcard) {
 | 
	
		
			
				|  |  | +                    dynamicObject.set("bizstatus", "READY");
 | 
	
		
			
				|  |  | +                } else if (!FaCommonUtils.equals(SourceFlagEnum.ADD, sourceFlag) && !FaCommonUtils.equals(SourceFlagEnum.IMPORT, sourceFlag) && !FaCommonUtils.equals(SourceFlagEnum.INITIAL, sourceFlag) && !FaCommonUtils.equals(SourceFlagEnum.INVENTORYPROFIT, sourceFlag) && !FaCommonUtils.equals(SourceFlagEnum.DATAASSET, sourceFlag) && !FaCommonUtils.equals(SourceFlagEnum.SCAN, sourceFlag)) {
 | 
	
		
			
				|  |  | +                    if (FaCommonUtils.equals(SourceFlagEnum.PURCHASE, sourceFlag)) {
 | 
	
		
			
				|  |  | +                        dynamicPurchase.add(dynamicObject);
 | 
	
		
			
				|  |  | +                    } else if (FaCommonUtils.equals(SourceFlagEnum.DISPATCH, sourceFlag)) {
 | 
	
		
			
				|  |  | +                        dynamicDispatch.add(dynamicObject);
 | 
	
		
			
				|  |  | +                    } else if (FaCommonUtils.equals(SourceFlagEnum.INVENTORYPROFIT, sourceFlag)) {
 | 
	
		
			
				|  |  | +                        dynamicInventory.add(dynamicObject);
 | 
	
		
			
				|  |  | +                    } else if (FaCommonUtils.equals(SourceFlagEnum.ENGINEERINGTRANS, sourceFlag)) {
 | 
	
		
			
				|  |  | +                        dynamicEnginner.add(dynamicObject);
 | 
	
		
			
				|  |  | +                    } else if (FaCommonUtils.equals(SourceFlagEnum.LEASECONTRACT, sourceFlag)) {
 | 
	
		
			
				|  |  | +                        dynamicLease.add(dynamicObject);
 | 
	
		
			
				|  |  | +                    } else {
 | 
	
		
			
				|  |  | +                        if (!FaCommonUtils.equals(SourceFlagEnum.INITLEASECONTRACT, sourceFlag)) {
 | 
	
		
			
				|  |  | +                            throw new KDBizException(FinCardErrorCode.FINCARD_GENERATE_ERROR, new Object[0]);
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        dynamicInitLease.add(dynamicObject);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    dynamicAdd.add(dynamicObject);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Map<Object, Object> finCardAndrealCard = new HashMap();
 | 
	
		
			
				|  |  | +            if (CollectionUtil.isNotEmpty(dynamicAdd)) {
 | 
	
		
			
				|  |  | +                generate = new AddCardToFinCardGenerate();
 | 
	
		
			
				|  |  | +                callbackFincards.addAll(generate.generateDynamicFinCard(dynamicAdd, orgAssetBooksMap, finCardType, billHeadType, realCardTableId, finCardAndrealCard));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (CollectionUtil.isNotEmpty(dynamicPurchase)) {
 | 
	
		
			
				|  |  | +                generate = new PurchaseToFinCardGenerate();
 | 
	
		
			
				|  |  | +                callbackFincards.addAll(generate.generateDynamicFinCard(dynamicPurchase, orgAssetBooksMap, finCardType, billHeadType, realCardTableId, finCardAndrealCard));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (CollectionUtil.isNotEmpty(dynamicDispatch)) {
 | 
	
		
			
				|  |  | +                generate = new DispatchToFinCardGenerate();
 | 
	
		
			
				|  |  | +                callbackFincards.addAll(generate.generateDynamicFinCard(dynamicDispatch, orgAssetBooksMap, finCardType, billHeadType, realCardTableId, finCardAndrealCard));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (CollectionUtil.isNotEmpty(dynamicInventory)) {
 | 
	
		
			
				|  |  | +                generate = new InventoryProfitToFinCardGenerate();
 | 
	
		
			
				|  |  | +                callbackFincards.addAll(generate.generateDynamicFinCard(dynamicInventory, orgAssetBooksMap, finCardType, billHeadType, realCardTableId, finCardAndrealCard));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (CollectionUtil.isNotEmpty(dynamicEnginner)) {
 | 
	
		
			
				|  |  | +                generate = new EngineeringToFinCardGenerate();
 | 
	
		
			
				|  |  | +                callbackFincards.addAll(generate.generateDynamicFinCard(dynamicEnginner, orgAssetBooksMap, finCardType, billHeadType, realCardTableId, finCardAndrealCard));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (CollectionUtil.isNotEmpty(dynamicLease)) {
 | 
	
		
			
				|  |  | +                generate = new LeaseContractToFinCardGenerate();
 | 
	
		
			
				|  |  | +                callbackFincards.addAll(generate.generateDynamicFinCard(dynamicLease, orgAssetBooksMap, finCardType, billHeadType, realCardTableId, finCardAndrealCard));
 | 
	
		
			
				|  |  | +                Map<Long, Long> leaseMap = new HashMap<>();
 | 
	
		
			
				|  |  | +                for (DynamicObject object : dynamicLease) {
 | 
	
		
			
				|  |  | +                    long id = object.getLong("id");
 | 
	
		
			
				|  |  | +                    long srcbillid = object.getLong("srcbillid");
 | 
	
		
			
				|  |  | +                    leaseMap.put(id, srcbillid);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                for (DynamicObject callbackFincard : callbackFincards) {
 | 
	
		
			
				|  |  | +                    long realcardmasterid = callbackFincard.getLong("realcardmasterid");
 | 
	
		
			
				|  |  | +                    if (leaseMap.containsKey(realcardmasterid)) {
 | 
	
		
			
				|  |  | +                        long srcbillid = leaseMap.get(realcardmasterid);
 | 
	
		
			
				|  |  | +                        callbackFincard.set("nckd_bigintfield", srcbillid);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (CollectionUtil.isNotEmpty(dynamicInitLease)) {
 | 
	
		
			
				|  |  | +                generate = new InitLeaseContractToFinCardGenerate();
 | 
	
		
			
				|  |  | +                callbackFincards.addAll(generate.generateDynamicFinCard(dynamicInitLease, orgAssetBooksMap, finCardType, billHeadType, realCardTableId, finCardAndrealCard));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            OperateOption operateOption = OperateOption.create();
 | 
	
		
			
				|  |  | +            operateOption.setVariableValue("genfincard", "true");
 | 
	
		
			
				|  |  | +            operateOption.setVariableValue("ignore_validate_initial_fincard", "true");
 | 
	
		
			
				|  |  | +            operateOption.setVariableValue("ignoreAssetBookStatus", "true");
 | 
	
		
			
				|  |  | +            OperationResult result = OperationServiceHelper.executeOperate("save", "fa_card_fin", (DynamicObject[])callbackFincards.toArray(new DynamicObject[0]), operateOption);
 | 
	
		
			
				|  |  | +            if (result.isSuccess()) {
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            List<IOperateInfo> allError = result.getAllErrorOrValidateInfo();
 | 
	
		
			
				|  |  | +            result.getAllErrorInfo();
 | 
	
		
			
				|  |  | +            StringBuilder errorInfo = new StringBuilder();
 | 
	
		
			
				|  |  | +            if (!CollectionUtils.isEmpty(allError)) {
 | 
	
		
			
				|  |  | +                Iterator var31 = allError.iterator();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                while(var31.hasNext()) {
 | 
	
		
			
				|  |  | +                    IOperateInfo in = (IOperateInfo)var31.next();
 | 
	
		
			
				|  |  | +                    errorInfo.append(in.getMessage());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            String msg = (new LocaleString(String.format("%s%s-%s", ResManager.loadKDString("生成财务卡片失败,审核事务失败", "CardGenerateHelper_0", "fi-fa-business", new Object[0]), result.getMessage(), errorInfo.toString()))).toString();
 | 
	
		
			
				|  |  | +            throw new KDBizException(msg);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static Map<Long, Map<Long, DynamicObject>> generateFinCardForAssetCard(List<DynamicObject> realCardList, String entityName) {
 | 
	
		
			
				|  |  | +        String finEntityName = "";
 | 
	
		
			
				|  |  | +        if (entityName.equals("fa_asset_card")) {
 | 
	
		
			
				|  |  | +            finEntityName = "fa_card_fin";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (entityName.equals("fa_asset_initcard")) {
 | 
	
		
			
				|  |  | +            finEntityName = "fa_initcard_fin";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        MainEntityType finCardType = EntityMetadataCache.getDataEntityType(finEntityName);
 | 
	
		
			
				|  |  | +        DynamicObjectType billHeadType = ((EntryProp)finCardType.getProperty("billhead_lk")).getDynamicCollectionItemPropertyType();
 | 
	
		
			
				|  |  | +        Long realCardTableId = EntityMetadataCache.loadTableDefine("fa_card_real", "fa_card_real").getTableId();
 | 
	
		
			
				|  |  | +        Map<Object, DynamicObject[]> orgAssetBookMap = getAssetBooksByOrg(realCardList);
 | 
	
		
			
				|  |  | +        Map<Object, Object> finCardAndrealCard = new HashMap(realCardList.size());
 | 
	
		
			
				|  |  | +        AbstractFinCardGenerate generate = new AssetCardToFinCardGenerate();
 | 
	
		
			
				|  |  | +        List<DynamicObject> finCardList = generate.generateDynamicFinCard(realCardList, orgAssetBookMap, finCardType, billHeadType, realCardTableId, finCardAndrealCard);
 | 
	
		
			
				|  |  | +        Map<Long, Map<Long, DynamicObject>> finCardMap = new HashMap(finCardList.size());
 | 
	
		
			
				|  |  | +        Iterator var11 = finCardList.iterator();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        while(var11.hasNext()) {
 | 
	
		
			
				|  |  | +            DynamicObject finCard = (DynamicObject)var11.next();
 | 
	
		
			
				|  |  | +            long fid = DBServiceHelper.genGlobalLongId();
 | 
	
		
			
				|  |  | +            finCard.set("id", fid);
 | 
	
		
			
				|  |  | +            long realCardId = finCard.getLong(Fa.id("realcard"));
 | 
	
		
			
				|  |  | +            long depreUseId = finCard.getLong(Fa.id("depreuse"));
 | 
	
		
			
				|  |  | +            Map<Long, DynamicObject> depreUseCardMap = (Map)finCardMap.computeIfAbsent(realCardId, (v) -> {
 | 
	
		
			
				|  |  | +                return new HashMap(4);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            depreUseCardMap.put(depreUseId, finCard);
 | 
	
		
			
				|  |  | +            finCard.getDynamicObjectCollection("billhead_lk").clear();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return finCardMap;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private static Map<Object, DynamicObject[]> getAssetBooksByOrg(List<DynamicObject> realCards) {
 | 
	
		
			
				|  |  | +        Set<Long> orgIds = new HashSet(4);
 | 
	
		
			
				|  |  | +        Set<Long> realCardIds = new HashSet(FaUtils.getInitialCapacity43(realCards.size()));
 | 
	
		
			
				|  |  | +        Iterator var3 = realCards.iterator();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        while(var3.hasNext()) {
 | 
	
		
			
				|  |  | +            DynamicObject realCard = (DynamicObject)var3.next();
 | 
	
		
			
				|  |  | +            orgIds.add(realCard.getLong(Fa.id("org")));
 | 
	
		
			
				|  |  | +            realCardIds.add(realCard.getLong("id"));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        QFilter filters = new QFilter("org", "in", orgIds);
 | 
	
		
			
				|  |  | +        String sic = Fa.join(",", new String[]{"id", "depreuse", "org", "ismainbook", "basecurrency", "periodtype", "depresystem", "curperiod", "isgroupbook", "exchangetable", "status", "startperiod"});
 | 
	
		
			
				|  |  | +        Map<Object, DynamicObject> assetBook4Load = BusinessDataServiceHelper.loadFromCache("fa_assetbook", sic, new QFilter[]{filters});
 | 
	
		
			
				|  |  | +        Map<Long, Set<DynamicObject>> org2AssetBooks = new HashMap(FaUtils.getInitialCapacity43(orgIds.size()));
 | 
	
		
			
				|  |  | +        Iterator var7 = assetBook4Load.values().iterator();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        while(var7.hasNext()) {
 | 
	
		
			
				|  |  | +            DynamicObject assetBook = (DynamicObject)var7.next();
 | 
	
		
			
				|  |  | +            long orgId = assetBook.getLong(Fa.id("org"));
 | 
	
		
			
				|  |  | +            Set<DynamicObject> assetBooks = (Set)org2AssetBooks.computeIfAbsent(orgId, (k) -> {
 | 
	
		
			
				|  |  | +                return new HashSet(4);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            assetBooks.add(assetBook);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        DataSet finCards = QueryServiceHelper.queryDataSet("getAssetBooksByOrg.realCardsQueryFinCards", "fa_card_fin", Fa.comma(new String[]{"realcard", "assetbook"}), new QFilter[]{new QFilter("realcard", "in", realCardIds), new QFilter("endperiod", "=", 99999999999L)}, (String)null);
 | 
	
		
			
				|  |  | +        Map<Long, Set<Long>> realCardId2AssetBookIds = new HashMap(realCards.size());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        while(finCards.hasNext()) {
 | 
	
		
			
				|  |  | +            Row next = finCards.next();
 | 
	
		
			
				|  |  | +            long realCardId = next.getLong("realcard");
 | 
	
		
			
				|  |  | +            Set<Long> assetBookIds = (Set)realCardId2AssetBookIds.computeIfAbsent(realCardId, (v) -> {
 | 
	
		
			
				|  |  | +                return new HashSet(4);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            assetBookIds.add(next.getLong("assetbook"));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Map<Object, DynamicObject[]> realCardId2AssetBooks = new HashMap(FaUtils.getInitialCapacity43(realCards.size()));
 | 
	
		
			
				|  |  | +        Iterator var31 = realCards.iterator();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        while(true) {
 | 
	
		
			
				|  |  | +            while(true) {
 | 
	
		
			
				|  |  | +                while(true) {
 | 
	
		
			
				|  |  | +                    while(true) {
 | 
	
		
			
				|  |  | +                        long realCardId;
 | 
	
		
			
				|  |  | +                        boolean isFromLease;
 | 
	
		
			
				|  |  | +                        Set assetBookIds;
 | 
	
		
			
				|  |  | +                        Set assetBooks;
 | 
	
		
			
				|  |  | +                        do {
 | 
	
		
			
				|  |  | +                            if (!var31.hasNext()) {
 | 
	
		
			
				|  |  | +                                return realCardId2AssetBooks;
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            DynamicObject realCard = (DynamicObject)var31.next();
 | 
	
		
			
				|  |  | +                            long orgId = realCard.getLong(Fa.id("org"));
 | 
	
		
			
				|  |  | +                            realCardId = realCard.getLong("id");
 | 
	
		
			
				|  |  | +                            isFromLease = SourceFlagEnum.INITLEASECONTRACT.name().equals(realCard.getString("sourceflag")) || SourceFlagEnum.LEASECONTRACT.name().equals(realCard.getString("sourceflag"));
 | 
	
		
			
				|  |  | +                            assetBookIds = (Set)realCardId2AssetBookIds.get(realCardId);
 | 
	
		
			
				|  |  | +                            assetBooks = (Set)org2AssetBooks.get(orgId);
 | 
	
		
			
				|  |  | +                        } while(assetBooks == null);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        if (assetBookIds == null) {
 | 
	
		
			
				|  |  | +                            if (isFromLease) {
 | 
	
		
			
				|  |  | +                                Iterator var34 = assetBooks.iterator();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                while(var34.hasNext()) {
 | 
	
		
			
				|  |  | +                                    DynamicObject assetBook = (DynamicObject)var34.next();
 | 
	
		
			
				|  |  | +                                    if (assetBook.getBoolean("ismainbook")) {
 | 
	
		
			
				|  |  | +                                        realCardId2AssetBooks.put(realCardId, new DynamicObject[]{assetBook});
 | 
	
		
			
				|  |  | +                                        break;
 | 
	
		
			
				|  |  | +                                    }
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            } else {
 | 
	
		
			
				|  |  | +                                DynamicObject[] array = (DynamicObject[]) assetBooks.toArray(new DynamicObject[0]);
 | 
	
		
			
				|  |  | +                                realCardId2AssetBooks.put(realCardId, array);
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        } else {
 | 
	
		
			
				|  |  | +                            Set<DynamicObject> books = new HashSet(FaUtils.getInitialCapacity43(assetBooks.size()));
 | 
	
		
			
				|  |  | +                            Iterator var20 = assetBooks.iterator();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            while(var20.hasNext()) {
 | 
	
		
			
				|  |  | +                                DynamicObject assetBook = (DynamicObject)var20.next();
 | 
	
		
			
				|  |  | +                                boolean mainBook = assetBook.getBoolean("ismainbook");
 | 
	
		
			
				|  |  | +                                long assetBookId = assetBook.getLong("id");
 | 
	
		
			
				|  |  | +                                if (!assetBookIds.contains(assetBookId)) {
 | 
	
		
			
				|  |  | +                                    if (isFromLease) {
 | 
	
		
			
				|  |  | +                                        if (mainBook) {
 | 
	
		
			
				|  |  | +                                            books.add(assetBook);
 | 
	
		
			
				|  |  | +                                            break;
 | 
	
		
			
				|  |  | +                                        }
 | 
	
		
			
				|  |  | +                                    } else {
 | 
	
		
			
				|  |  | +                                        books.add(assetBook);
 | 
	
		
			
				|  |  | +                                    }
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            realCardId2AssetBooks.put(realCardId, books.toArray(new DynamicObject[0]));
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |