Merge remote-tracking branch 'origin/main' into main
This commit is contained in:
commit
6ef97d7565
|
|
@ -0,0 +1,240 @@
|
|||
package shkd.sys.sys.plugin.report;
|
||||
|
||||
import kd.bos.algo.*;
|
||||
import kd.bos.algo.input.CollectionInput;
|
||||
import kd.bos.base.BaseShowParameter;
|
||||
import kd.bos.bill.BillOperationStatus;
|
||||
import kd.bos.bill.BillShowParameter;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection;
|
||||
import kd.bos.dataentity.resource.ResManager;
|
||||
import kd.bos.db.DB;
|
||||
import kd.bos.db.DBRoute;
|
||||
import kd.bos.entity.datamodel.AbstractFormDataModel;
|
||||
import kd.bos.entity.report.AbstractReportListDataPluginExt;
|
||||
import kd.bos.event.AfterQueryEvent;
|
||||
import kd.bos.form.ShowType;
|
||||
import kd.bos.form.events.HyperLinkClickEvent;
|
||||
import kd.bos.form.plugin.AbstractFormPlugin;
|
||||
import kd.bos.logging.Log;
|
||||
import kd.bos.logging.LogFactory;
|
||||
import kd.bos.orm.ORM;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.QueryServiceHelper;
|
||||
import kd.scmc.ism.common.utils.DataSetUtils;
|
||||
import kd.sdk.plugin.Plugin;
|
||||
import kd.tmc.fbp.common.constant.Constants;
|
||||
import kd.tmc.fbp.common.enums.BillStatusEnum;
|
||||
import kd.tmc.fbp.common.enums.ProductTypeEnum;
|
||||
import kd.tmc.fbp.common.helper.GuaranteeUseHelper;
|
||||
import kd.tmc.fbp.common.helper.TmcBusinessBaseHelper;
|
||||
import kd.tmc.fbp.common.helper.TmcDataServiceHelper;
|
||||
import kd.tmc.fbp.common.helper.TmcViewInputHelper;
|
||||
import kd.tmc.fbp.common.util.EmptyUtil;
|
||||
import kd.tmc.gm.common.helper.GuaranteeContractHelper;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 动态表单插件
|
||||
*/
|
||||
public class GuaranteeContractPatchPlugin extends AbstractReportListDataPluginExt{
|
||||
|
||||
private static final Log logger = LogFactory.getLog(GuaranteeContractPatchPlugin.class);
|
||||
|
||||
private static final String[] gcProps = new String[]{"gcomment", "gcparty", "gsrcbillid", "gsrcbillno", "gsrcbilltype", "gdebtorg", "gdebtorgtext", "gdebtcurrency", "gdebtamount", "gdebtbalance", "gratio", "gexchrate", "gdebtstartdate", "gdebtenddate", "gcontract", "gsrcbillbizamount", "gcreditortype", "gcreditor", "gcreditortext"};
|
||||
|
||||
public void afterQuery(AfterQueryEvent event) {
|
||||
DataSet dataSet = event.getDataSet();
|
||||
//1、补充查询担保额度
|
||||
StringBuilder sqlBuilder = new StringBuilder("SELECT \n" +
|
||||
" a.fbillno AS guaranteedOriBillno,\n" +
|
||||
" b.fentryid AS guaranteedid,\n" +
|
||||
" b.fguaranteequotaid AS shkd_guaranteequotaid\n" +
|
||||
"FROM \n" +
|
||||
" t_gm_guarcontract AS a\n" +
|
||||
" LEFT JOIN t_gm_guaranteed_entry AS b \n" +
|
||||
" ON a.fid = b.fid");
|
||||
DataSet hl = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), sqlBuilder.toString());//系统云
|
||||
JoinDataSet join = dataSet.join(hl, JoinType.LEFT);
|
||||
String[] fieldNames = dataSet.getRowMeta().getFieldNames();
|
||||
String[] fieldNames2 = hl.getRowMeta().getFieldNames();
|
||||
DataSet finish = join.on("billno", "guaranteedOriBillno").select(fieldNames, fieldNames2).finish();
|
||||
|
||||
//2、补充担保债务分录
|
||||
DataSet finish2 = null;
|
||||
DataSet finishCopy = finish.copy();
|
||||
DynamicObjectCollection finishData = ORM.create().toPlainDynamicObjectCollection(finishCopy);
|
||||
ArrayList<Long> billIds = new ArrayList<>();
|
||||
for (DynamicObject finishDatum : finishData) {
|
||||
billIds.add(finishDatum.getLong("id"));
|
||||
}
|
||||
DynamicObject[] guaranteecontracts = BusinessDataServiceHelper.load("gm_guaranteecontract",
|
||||
"id,billno,currency,guaranteedebt_entry.shkd_parentbillno,guaranteedebt_entry.shkd_gsrcbilltype,guaranteedebt_entry.shkd_gsrcbillno," +
|
||||
"guaranteedebt_entry.shkd_gsrcbillid,guaranteedebt_entry.shkd_gcparty,guaranteedebt_entry.shkd_gdebtorgtext," +
|
||||
"guaranteedebt_entry.shkd_gdebtorg,guaranteedebt_entry.shkd_gdebtcurrency,guaranteedebt_entry.shkd_gdebtamount," +
|
||||
"guaranteedebt_entry.shkd_gdebtbalance,guaranteedebt_entry.shkd_gdebtstartdate,guaranteedebt_entry.shkd_gdebtenddate," +
|
||||
"guaranteedebt_entry.shkd_gcomment,guaranteedebt_entry.shkd_gstatus", new QFilter("id", "in", billIds).toArray());
|
||||
if (!EmptyUtil.isEmpty(guaranteecontracts)) {
|
||||
//实例化一个list,储存所有担保合同-担保债务分录
|
||||
ArrayList<DynamicObjectCollection> temps = new ArrayList<>();
|
||||
for (DynamicObject guaranteecontract : guaranteecontracts) {
|
||||
DynamicObjectCollection guaranteedebt_entry = guaranteecontract.getDynamicObjectCollection("guaranteedebt_entry");
|
||||
DynamicObject entry = guaranteedebt_entry.addNew();
|
||||
QFilter gQF = new QFilter("gcontract.id", "=", guaranteecontract.getLong("id"));
|
||||
gQF.and("billstatus", "=", BillStatusEnum.AUDIT.getValue());
|
||||
DynamicObjectCollection gcUseBills = QueryServiceHelper.query("gm_guaranteeuse", String.join(",", gcProps), gQF.toArray());
|
||||
if (!EmptyUtil.isEmpty(gcUseBills)) {
|
||||
Map<Long, BigDecimal> letterCreditMap = GuaranteeContractHelper.getLetterCreditMap(gcUseBills);
|
||||
Map<Long, BigDecimal> loanBillMap = GuaranteeContractHelper.getLoanBillMap(gcUseBills);
|
||||
DynamicObject[] gcUseBillArr = GuaranteeUseHelper.removeExpireData((DynamicObject[])gcUseBills.toArray(new DynamicObject[gcUseBills.size()]));
|
||||
DynamicObject gContractCcy = guaranteecontract.getDynamicObject("currency");
|
||||
Long gContractCcyId = (Long)gContractCcy.getPkValue();
|
||||
List<Long> creditLimitIds = new ArrayList();
|
||||
DynamicObject[] var12 = gcUseBillArr;
|
||||
int var13 = gcUseBillArr.length;
|
||||
|
||||
for(int var14 = 0; var14 < var13; ++var14) {
|
||||
DynamicObject gcBIll = var12[var14];
|
||||
if ("cfm_creditlimit".equals(TmcBusinessBaseHelper.getBillFormId(gcBIll.getString("gsrcbilltype")))) {
|
||||
creditLimitIds.add(gcBIll.getLong("gsrcbillid"));
|
||||
} else {
|
||||
BigDecimal debtBalance = gcBIll.getBigDecimal("gdebtbalance");
|
||||
if ("lc_lettercredit".equals(gcBIll.get("gsrcbilltype")) && EmptyUtil.isNoEmpty((BigDecimal)letterCreditMap.get(gcBIll.getLong("gsrcbillid")))) {
|
||||
debtBalance = ((BigDecimal)letterCreditMap.get(gcBIll.getLong("gsrcbillid"))).multiply(gcBIll.getBigDecimal("gratio")).divide(Constants.ONE_HUNDRED, 4, RoundingMode.HALF_UP);
|
||||
} else if (Arrays.asList("cfm_loanbill_b_l", "cfm_loanbill_e_l", "cfm_loanbill", "cim_invest_loanbill").contains(gcBIll.get("gsrcbilltype")) && EmptyUtil.isNoEmpty((BigDecimal)loanBillMap.get(gcBIll.getLong("gsrcbillid")))) {
|
||||
debtBalance = ((BigDecimal)loanBillMap.get(gcBIll.getLong("gsrcbillid"))).multiply(gcBIll.getBigDecimal("gratio")).divide(Constants.ONE_HUNDRED, 4, RoundingMode.HALF_UP);
|
||||
}
|
||||
|
||||
Long debtBillOrg = gcBIll.getLong("gdebtorg");
|
||||
String debtBillOrgText = gcBIll.getString("gdebtorgtext");
|
||||
Long debtBillCcy = gcBIll.getLong("gdebtcurrency");
|
||||
if (EmptyUtil.isNoEmpty(debtBillCcy) && !gContractCcyId.equals(debtBillCcy) && debtBalance.compareTo(BigDecimal.ZERO) != 0) {
|
||||
BigDecimal gExchangeRate = gcBIll.getBigDecimal("gexchrate");
|
||||
debtBalance = debtBalance.multiply(gExchangeRate);
|
||||
}
|
||||
|
||||
entry.set("shkd_parentbillno", guaranteecontract.get("billno"));
|
||||
entry.set("shkd_gsrcbilltype", gcBIll.get("gsrcbilltype"));
|
||||
entry.set("shkd_gsrcbillno", gcBIll.get("gsrcbillno"));
|
||||
entry.set("shkd_gsrcbillid", gcBIll.get("gsrcbillid"));
|
||||
entry.set("shkd_gcparty", EmptyUtil.isNoEmpty(gcBIll.getString("gcreditortext")) ? gcBIll.get("gcreditortext") : gcBIll.get("gcparty"));
|
||||
entry.set("shkd_gdebtorg", debtBillOrg);
|
||||
entry.set("shkd_gdebtorgtext", debtBillOrgText);
|
||||
entry.set("shkd_gdebtcurrency", debtBillCcy);
|
||||
entry.set("shkd_gdebtamount", gcBIll.get("gsrcbillbizamount"));
|
||||
entry.set("shkd_gdebtbalance", debtBalance);
|
||||
entry.set("shkd_gdebtstartdate", gcBIll.get("gdebtstartdate"));
|
||||
entry.set("shkd_gdebtenddate", gcBIll.get("gdebtenddate"));
|
||||
String billTypeEntity = this.containsEntity(gcBIll.getString("gsrcbilltype"));
|
||||
if (billTypeEntity != null) {
|
||||
QFilter gSrcBillIdFilter = new QFilter("id", "=", gcBIll.get("gsrcbillid"));
|
||||
DynamicObject gSrcDo = TmcDataServiceHelper.loadSingle(billTypeEntity, "cfm_loanbill".equals(billTypeEntity) ? "renewalexpiredate,drawtype" : "renewalexpiredate", gSrcBillIdFilter.toArray());
|
||||
if (EmptyUtil.isNoEmpty(gSrcDo) && EmptyUtil.isNoEmpty(gSrcDo.get("renewalexpiredate"))) {
|
||||
entry.set("shkd_gdebtenddate", gSrcDo.get("renewalexpiredate"));
|
||||
}
|
||||
|
||||
if (EmptyUtil.isNoEmpty(gSrcDo) && "cfm_loanbill".equals(billTypeEntity) && "closeout".equals(gSrcDo.getString("drawtype"))) {
|
||||
debtBalance = BigDecimal.ZERO;
|
||||
entry.set("shkd_gdebtbalance", debtBalance);
|
||||
}
|
||||
}
|
||||
|
||||
entry.set("shkd_gcomment", gcBIll.get("gcomment"));
|
||||
entry.set("shkd_gstatus", gcBIll.getBigDecimal("gratio").compareTo(BigDecimal.ZERO) == 0 ? "C" : (BigDecimal.ZERO.compareTo(debtBalance) != 0 ? "A" : "B"));
|
||||
}
|
||||
}
|
||||
}
|
||||
temps.add(guaranteedebt_entry);
|
||||
}
|
||||
//循环temps整合所有分录数据
|
||||
DynamicObjectCollection finalTemp = temps.get(0);
|
||||
for (int i = 1; i < temps.size(); i++) {
|
||||
finalTemp.addAll(temps.get(i));
|
||||
}
|
||||
//将整合好后的finalTemp转换为dataset
|
||||
finish2 = buildDataByObjCollection(finalTemp);
|
||||
JoinDataSet join2 = finish.join(finish2, JoinType.LEFT);
|
||||
String[] fieldNames3 = finish.getRowMeta().getFieldNames();
|
||||
String[] fieldNames4 = finish2.getRowMeta().getFieldNames();
|
||||
finish = join2.on("billno", "shkd_parentbillno").select(fieldNames3, fieldNames4).finish();
|
||||
|
||||
}
|
||||
//3、注入整合后的table数据
|
||||
event.setDataSet(finish);
|
||||
}
|
||||
|
||||
public DataSet buildDataByObjCollection(DynamicObjectCollection finalTemp) {
|
||||
DataSet finish = null;
|
||||
// 创建一个空的DataSet 将DynamicObjectCollection转化为DataSet
|
||||
Collection<Object[]> coll = new ArrayList<>();//报表展示数据
|
||||
// 遍历修改后的数据的所有字段
|
||||
List<String> displayFields = new ArrayList<>();//列标识
|
||||
DynamicObject object = finalTemp.get(0);
|
||||
DataEntityPropertyCollection properties = object.getDataEntityType().getProperties();
|
||||
// 获取所有列标识
|
||||
properties.forEach(property -> {
|
||||
if (!"id".equals(property.getName())) {
|
||||
displayFields.add(property.getName());
|
||||
}
|
||||
});
|
||||
logger.info("displayFields列标识:{}", displayFields);
|
||||
|
||||
for (DynamicObject dataRow : finalTemp) {
|
||||
// 将数据放入数组
|
||||
Object[] objects = new Object[displayFields.size()];
|
||||
for (int i = 0; i < displayFields.size(); i++) {
|
||||
objects[i] = dataRow.get(displayFields.get(i));
|
||||
}
|
||||
coll.add(objects);
|
||||
}
|
||||
|
||||
//构建列类型列表,为dataset构建做准备
|
||||
DataType stringType = DataType.StringType;
|
||||
DataType dateType = DataType.DateType;
|
||||
DataType bigDecimalType = DataType.BigDecimalType;
|
||||
DataType longType = DataType.LongType;
|
||||
DataType anyType = DataType.AnyType;
|
||||
// DataType integerType = DataType.IntegerType;
|
||||
|
||||
List<DataType> dataTypes = new ArrayList<>();//列类型列表
|
||||
|
||||
for (String field : displayFields) {
|
||||
if (field.contains("date")) {
|
||||
dataTypes.add(dateType);
|
||||
} else if (field.contains("amount") || field.contains("gdebtbalance")) {
|
||||
dataTypes.add(bigDecimalType);
|
||||
} else if (field.contains("gdebtcurrency")) {
|
||||
dataTypes.add(anyType);
|
||||
} else if (field.equals("shkd_gdebtorg") || field.contains("gsrcbillid")) {
|
||||
dataTypes.add(longType);
|
||||
} else {
|
||||
dataTypes.add(stringType);
|
||||
}
|
||||
}
|
||||
logger.info("dataTypes数据类型:{}", dataTypes);
|
||||
|
||||
RowMeta rowMeta = RowMetaFactory.createRowMeta(displayFields.toArray(new String[0]), dataTypes.toArray(new DataType[0]));
|
||||
CollectionInput inputs = new CollectionInput(rowMeta, coll);
|
||||
|
||||
try {
|
||||
finish = Algo.create(this.getClass().getName()).createDataSet(inputs);
|
||||
} catch (Exception e) {
|
||||
logger.error("数据集创建失败:{}", e.getMessage());
|
||||
}
|
||||
return finish;
|
||||
}
|
||||
|
||||
|
||||
private String containsEntity(String gSrcBillType) {
|
||||
if ("cfm_loancontractbill".equals(gSrcBillType)) {
|
||||
return gSrcBillType;
|
||||
} else {
|
||||
return gSrcBillType != null && gSrcBillType.indexOf("_loanbill") > 0 ? "cfm_loanbill" : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue