提交人:陈绍鑫

日期:2025/5/29 12:30
内容:开票登记转换规则插件
This commit is contained in:
陈绍鑫 2025-05-29 13:29:06 +08:00
parent 303ce97c37
commit 7e9756f53f
1 changed files with 305 additions and 0 deletions

View File

@ -0,0 +1,305 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package shkd.sys.sys.plugin.other;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.entity.EntityMetadataCache;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.botp.plugin.AbstractConvertPlugIn;
import kd.bos.entity.botp.plugin.args.AfterBuildQueryParemeterEventArgs;
import kd.bos.entity.botp.plugin.args.AfterFieldMappingEventArgs;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QFilter;
import kd.tmc.cdm.common.enums.DraftTradeTypeEnum;
import kd.tmc.cdm.common.enums.SettleMentTypeEnum;
import kd.tmc.cdm.common.helper.TradeBillAmountHelper;
import kd.tmc.cdm.common.helper.TradeBillHelper;
import kd.tmc.fbp.common.helper.TmcDataServiceHelper;
import kd.tmc.fbp.common.util.EmptyUtil;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
public class newDraftBillToTradeBillConvertPlugin extends AbstractConvertPlugIn {
private static Log logger = LogFactory.getLog(newDraftBillToTradeBillConvertPlugin.class);
public newDraftBillToTradeBillConvertPlugin() {
}
public void afterBuildQueryParemeter(AfterBuildQueryParemeterEventArgs e) {
super.afterBuildQueryParemeter(e);
}
public void afterFieldMapping(AfterFieldMappingEventArgs e) {
super.afterFieldMapping(e);
String tradeType = this.getOption().getVariableValue("tradeType");
boolean isFromAuto = this.getOption().containsVariable("isfromauto");
logger.info("tradeType is:" + tradeType + ",isFromAuto:" + isFromAuto);
String targetEntityNumber = this.getTgtMainType().getName();
ExtendedDataEntity[] billDataEntitys = e.getTargetExtDataEntitySet().FindByEntityKey(targetEntityNumber);
ExtendedDataEntity[] var6 = billDataEntitys;
int var7 = billDataEntitys.length;
for(int var8 = 0; var8 < var7; ++var8) {
ExtendedDataEntity billDataEntity = var6[var8];
DynamicObject targetBill = billDataEntity.getDataEntity();
targetBill.set("tradetype", tradeType);
DynamicObject billType = TmcDataServiceHelper.loadSingle(DraftTradeTypeEnum.getType(tradeType), "bos_billtype");
targetBill.set("billtype", billType);
// targetBill.set("payeetypetext", "bd_supplier");
// targetBill.set("payeetype", "bd_supplier");
// targetBill.set("beendorsor", (Object)null);
this.initFeilds(targetBill);
TradeBillAmountHelper.calcTradeBillAmount(targetBill);
String isPledged = this.getOption().getVariableValue("isPledged", "false");
if ("true".equals(isPledged)) {
long tradeBillId = Long.parseLong(this.getOption().getVariableValue("tradeBillId", "0"));
DynamicObject tradeBill = TmcDataServiceHelper.loadSingle(tradeBillId, EntityMetadataCache.getDataEntityType("cdm_drafttradebill"));
DynamicObjectCollection entry = tradeBill.getDynamicObjectCollection("entrys");
Map<Long, Long> draftIdToBillLogIdMap = (Map)entry.stream().collect(Collectors.toMap((o) -> {
return o.getDynamicObject("draftbill").getLong("id");
}, (o) -> {
return o.getLong("billlogid");
}, (a, b) -> {
return a;
}));
DynamicObjectCollection sourceEntry = targetBill.getDynamicObjectCollection("entrys");
BigDecimal amount = BigDecimal.ZERO;
DynamicObject dynamicObject;
for(Iterator var20 = sourceEntry.iterator(); var20.hasNext(); amount = amount.add(dynamicObject.getBigDecimal("billamt"))) {
dynamicObject = (DynamicObject)var20.next();
dynamicObject.set("billlogid", draftIdToBillLogIdMap.get(dynamicObject.getDynamicObject("draftbill").getLong("id")));
dynamicObject.set("billamt", dynamicObject.getDynamicObject("draftbill").getBigDecimal("amount"));
}
targetBill.set("source", "fromcollect");
targetBill.set("sourcebillid", tradeBillId);
targetBill.set("amount", amount);
}
this.fillDepositEntryWhenAutoCall(tradeType, isFromAuto, targetBill);
}
}
private void fillDepositEntryWhenAutoCall(String tradeType, boolean isFromAuto, DynamicObject targetBill) {
if (isFromAuto && "payoff".equals(tradeType)) {
boolean depositDeduct = targetBill.getBoolean("depositdeduct");
if (depositDeduct) {
DynamicObjectCollection selectEntrys = targetBill.getDynamicObjectCollection("entrys");
if (EmptyUtil.isNoEmpty(selectEntrys)) {
new ArrayList();
List<Long> draftListIds = (List)selectEntrys.stream().filter(Objects::nonNull).map((o) -> {
return o.getDynamicObject("draftbill").getLong("id");
}).collect(Collectors.toList());
DynamicObject[] billsList = TmcDataServiceHelper.load("cdm_payablebill", "id,draftbillno,sourcebillid,source", new QFilter[]{new QFilter("id", "in", draftListIds)});
logger.info("draftListIds is that is:" + SerializationUtils.toJsonString(draftListIds));
Map<Long, DynamicObject> billIdAndBillMap = (Map)Arrays.stream(billsList).collect(Collectors.toMap((e1) -> {
return e1.getLong("id");
}, (e1) -> {
return e1;
}));
Map<Long, List<DynamicObject>> billIdAndSuretyIdMap = TradeBillHelper.loadSurety(billsList);
Map<Long, Set<String>> dpBillMap = new HashMap();
Map<Long, DynamicObject> dpBillDyMap = new HashMap();
Iterator var12 = billIdAndSuretyIdMap.entrySet().iterator();
while(true) {
while(var12.hasNext()) {
Map.Entry<Long, List<DynamicObject>> entry = (Map.Entry)var12.next();
Long key = (Long)entry.getKey();
logger.info("key is that:" + key);
DynamicObject draft = (DynamicObject)billIdAndBillMap.get(key);
if (null == draft) {
logger.info("draft is null:" + key);
} else {
String billno = draft.getString("draftbillno");
List<DynamicObject> dpEntrys = (List)entry.getValue();
Iterator var18 = dpEntrys.iterator();
while(var18.hasNext()) {
DynamicObject depositDyj = (DynamicObject)var18.next();
long dpId = depositDyj.getLong("id");
if (dpBillMap.containsKey(dpId)) {
((Set)dpBillMap.get(dpId)).add(billno);
} else {
Set<String> set = new HashSet();
set.add(billno);
dpBillMap.put(dpId, set);
}
if (!dpBillDyMap.containsKey(dpId)) {
dpBillDyMap.put(dpId, depositDyj);
}
}
}
}
Set<Long> longSet = dpBillMap.keySet();
ArrayList<Long> dpIdList = new ArrayList(longSet);
DynamicObjectCollection depositentrys = targetBill.getDynamicObjectCollection("depositentry");
for(int i = 0; i < dpIdList.size(); ++i) {
Long dpId = (Long)dpIdList.get(i);
Set<String> billNos = (Set)dpBillMap.get(dpId);
StringJoiner billnoStr = new StringJoiner(";");
Iterator var30 = billNos.iterator();
while(var30.hasNext()) {
String billNo = (String)var30.next();
billnoStr.add(billNo);
}
String billnosString = billnoStr.toString() + ";";
DynamicObject depositentry = depositentrys.addNew();
depositentry.set("dpbillnos_tag", billnosString);
String substr = billnosString;
if (billnosString.length() > 255) {
substr = billnosString.substring(0, 245) + "...";
}
depositentry.set("dpbillnos", substr);
this.createDpDataRow(billNos, (DynamicObject)dpBillDyMap.get(dpId), depositentry);
}
this.calcDepositData(targetBill);
break;
}
}
}
}
}
private void calcDepositData(DynamicObject targetBill) {
DynamicObjectCollection dpEntrys = targetBill.getDynamicObjectCollection("depositentry");
BigDecimal deductamount = BigDecimal.ZERO;
BigDecimal dpdeductamount;
BigDecimal dinterestamount;
for(Iterator var4 = dpEntrys.iterator(); var4.hasNext(); deductamount = deductamount.add(dpdeductamount).add(dinterestamount)) {
DynamicObject dpEntry = (DynamicObject)var4.next();
dpdeductamount = dpEntry.getBigDecimal("dpdeductamount");
dinterestamount = dpEntry.getBigDecimal("dinterestamount");
if (EmptyUtil.isEmpty(dpdeductamount)) {
dpdeductamount = BigDecimal.ZERO;
}
if (EmptyUtil.isEmpty(dpdeductamount)) {
dinterestamount = BigDecimal.ZERO;
}
}
targetBill.set("deductamount", deductamount);
}
private void createDpDataRow(Set<String> billNos, DynamicObject depositDyj, DynamicObject depositentry) {
QFilter draftBillNoFilter = new QFilter("draftbillno", "in", billNos);
QFilter rpTypeFilter = new QFilter("rptype", "=", "paybill");
QFilter billStatusFilter = new QFilter("billstatus", "=", "C");
QFilter draftBillStatusFilter = new QFilter("draftbillstatus", "=", "registered");
DynamicObject[] payableBills = TmcDataServiceHelper.load("cdm_payablebill", "id,suretymoney", new QFilter[]{draftBillNoFilter, rpTypeFilter, billStatusFilter, draftBillStatusFilter});
BigDecimal suretyMoneyTotal = BigDecimal.ZERO;
DynamicObject[] var10 = payableBills;
int var11 = payableBills.length;
for(int var12 = 0; var12 < var11; ++var12) {
DynamicObject payableBill = var10[var12];
suretyMoneyTotal = suretyMoneyTotal.add(payableBill.getBigDecimal("suretymoney"));
}
BigDecimal surplusAmount = EmptyUtil.isEmpty(depositDyj.getBigDecimal("surplusamount")) ? BigDecimal.ZERO : depositDyj.getBigDecimal("surplusamount");
BigDecimal defaultSuretyAmount = surplusAmount.compareTo(suretyMoneyTotal) >= 0 ? suretyMoneyTotal : surplusAmount;
depositentry.set("guarantway", "deposit");
depositentry.set("dpbillno", depositDyj);
depositentry.set("dpremainamount", depositDyj.getBigDecimal("surplusamount"));
depositentry.set("dpsource", "gm");
depositentry.set("dpdeductamount", defaultSuretyAmount);
}
private void initFeilds(DynamicObject targetBill) {
Set<Object> currencyIds = new HashSet();
Set<Object> recBodyNames = new HashSet();
DynamicObjectCollection entrys = targetBill.getDynamicObjectCollection("entrys");
String tradeType = targetBill.getString("tradetype");
if (!EmptyUtil.isEmpty(entrys)) {
Set<Long> draftbillId = (Set)entrys.stream().map((e) -> {
return e.getDynamicObject("draftbill").getLong("id");
}).collect(Collectors.toSet());
Map<Long, BigDecimal> amountMap = new HashMap(16);
if (DraftTradeTypeEnum.PAYINTEREST.getValue().equals(tradeType) || DraftTradeTypeEnum.REDEEM.getValue().equals(tradeType)) {
amountMap = TradeBillAmountHelper.getTradeAmountByTradeType(tradeType, draftbillId, (Long)null);
}
DynamicObject[] draftBills = TmcDataServiceHelper.load(draftbillId.toArray(new Object[0]), EntityMetadataCache.getDataEntityType("cdm_draftbillf7"));
Map<Long, DynamicObject> draftIdAndDyMap = (Map)Arrays.stream(draftBills).collect(Collectors.toMap((e) -> {
return e.getLong("id");
}, (e) -> {
return e;
}));
Iterator var10 = entrys.iterator();
label52:
while(true) {
while(true) {
DynamicObject entry;
DynamicObject selectDraftBill;
do {
if (!var10.hasNext()) {
if (DraftTradeTypeEnum.REDEEM.getValue().equals(tradeType)) {
targetBill.set("company", draftBills[0].getDynamicObject("acceptercompany").getPkValue());
}
break label52;
}
entry = (DynamicObject)var10.next();
selectDraftBill = entry.getDynamicObject("draftbill");
} while(!EmptyUtil.isNoEmpty(selectDraftBill));
DynamicObject draftBill = (DynamicObject)draftIdAndDyMap.get(selectDraftBill.getLong("id"));
entry.set("draftbill", draftBill);
selectDraftBill = entry.getDynamicObject("draftbill");
Object curreyId = selectDraftBill.getDynamicObject("currency").getPkValue();
currencyIds.add(curreyId);
recBodyNames.add(selectDraftBill.getString("acceptername"));
if (!DraftTradeTypeEnum.PAYINTEREST.getValue().equals(tradeType) && !DraftTradeTypeEnum.REDEEM.getValue().equals(tradeType)) {
entry.set("billamt", selectDraftBill.getBigDecimal("availableamount"));
} else {
BigDecimal amount = selectDraftBill.getBigDecimal("amount");
BigDecimal dataBaseBillAmt = (BigDecimal)((Map)amountMap).getOrDefault(draftBill.getLong("id"), BigDecimal.ZERO);
entry.set("billamt", amount.subtract(dataBaseBillAmt));
}
}
}
}
logger.info("currencyIds.size():" + currencyIds.size());
DynamicObject draftType;
if (currencyIds.size() != 1) {
targetBill.set("currency", (Object)null);
} else {
draftType = ((DynamicObject)entrys.get(0)).getDynamicObject("draftbill").getDynamicObject("currency");
targetBill.set("currency", draftType);
}
draftType = targetBill.getDynamicObject("drafttype");
if (null != draftType) {
String setTlementType = draftType.getString("settlementtype");
if ((tradeType.equals(DraftTradeTypeEnum.COLLECT.getValue()) || tradeType.equals(DraftTradeTypeEnum.DISCOUNT.getValue())) && SettleMentTypeEnum.BUSINESS.getValue().equals(setTlementType) && recBodyNames.size() != 1) {
targetBill.set("recbodyname", (Object)null);
}
}
}
private void calcDeInterestAmountAllEntry(DynamicObject targetBill) {
}
}