Merge remote-tracking branch 'origin/main' into main
This commit is contained in:
commit
b4586c4169
|
|
@ -0,0 +1,73 @@
|
|||
package shkd.sys.sys.plugin.report;
|
||||
|
||||
import kd.bos.entity.datamodel.events.PackageDataEvent;
|
||||
import kd.bos.report.events.SortAndFilterEvent;
|
||||
import kd.tmc.gm.form.GuaranteeContractDetailFormPlugin;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 报表界面插件
|
||||
*/
|
||||
public class GuaranteeContractOverPlugin extends GuaranteeContractDetailFormPlugin {
|
||||
|
||||
//储存重复单据编号(如果newBillName != tempBillName 则将newBillName赋值给tempBillName)
|
||||
public String tempBillName = "";
|
||||
|
||||
//是否第一次进入packageData方法标识符
|
||||
Boolean isFirst = true;
|
||||
|
||||
@Override
|
||||
public void setMergeColums(List<String> columns) {
|
||||
|
||||
columns.add("guaranteeorgtext");
|
||||
columns.add("billno");
|
||||
columns.add("id");
|
||||
columns.add("guaranteedorgtext");
|
||||
columns.add("creditortext");
|
||||
columns.add("guaranteetext");
|
||||
columns.add("currency");
|
||||
columns.add("amount");
|
||||
columns.add("begindate");
|
||||
columns.add("enddate");
|
||||
columns.add("dutycurrency");
|
||||
columns.add("dutyamount");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void packageData(PackageDataEvent packageDataEvent) {
|
||||
if (isFirst) {
|
||||
tempBillName = packageDataEvent.getRowData().getString("billno");
|
||||
isFirst = false;
|
||||
}
|
||||
|
||||
//判断是否为同一单据 如果不是 则不应该合并
|
||||
String newBillName = packageDataEvent.getRowData().getString("billno");
|
||||
if (!newBillName.equals(tempBillName)) {
|
||||
tempBillName = newBillName;
|
||||
packageDataEvent.getNoMergeKey().add("guaranteeorgtext");
|
||||
packageDataEvent.getNoMergeKey().add("billno");
|
||||
packageDataEvent.getNoMergeKey().add("id");
|
||||
packageDataEvent.getNoMergeKey().add("guaranteedorgtext");
|
||||
packageDataEvent.getNoMergeKey().add("creditortext");
|
||||
packageDataEvent.getNoMergeKey().add("guaranteetext");
|
||||
packageDataEvent.getNoMergeKey().add("currency");
|
||||
packageDataEvent.getNoMergeKey().add("amount");
|
||||
packageDataEvent.getNoMergeKey().add("begindate");
|
||||
packageDataEvent.getNoMergeKey().add("enddate");
|
||||
packageDataEvent.getNoMergeKey().add("dutycurrency");
|
||||
packageDataEvent.getNoMergeKey().add("dutyamount");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSortAndFilter(List<SortAndFilterEvent> allColumns) {
|
||||
super.setSortAndFilter(allColumns);
|
||||
for (SortAndFilterEvent event : allColumns) {
|
||||
if ("billno".equals(event.getColumnName()))event.setFilter(true);//搜索
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -2,36 +2,25 @@ 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.entity.report.ReportQueryParam;
|
||||
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;
|
||||
|
||||
|
|
@ -39,6 +28,9 @@ import java.math.BigDecimal;
|
|||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
|
||||
import static kd.bos.mservice.extreport.runtime.domain.PageManager.refreshDataSet;
|
||||
import static shkd.sys.sys.plugin.report.ReportFilterAndSortUtil.refreshDataSet;
|
||||
|
||||
/**
|
||||
* 动态表单插件
|
||||
*/
|
||||
|
|
@ -47,6 +39,7 @@ public class GuaranteeContractPatchPlugin extends AbstractReportListDataPluginEx
|
|||
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"};
|
||||
private ReportQueryParam reportQueryParam;
|
||||
|
||||
public void afterQuery(AfterQueryEvent event) {
|
||||
DataSet dataSet = event.getDataSet();
|
||||
|
|
@ -84,7 +77,6 @@ public class GuaranteeContractPatchPlugin extends AbstractReportListDataPluginEx
|
|||
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());
|
||||
|
|
@ -99,6 +91,7 @@ public class GuaranteeContractPatchPlugin extends AbstractReportListDataPluginEx
|
|||
int var13 = gcUseBillArr.length;
|
||||
|
||||
for(int var14 = 0; var14 < var13; ++var14) {
|
||||
DynamicObject entry = guaranteedebt_entry.addNew();
|
||||
DynamicObject gcBIll = var12[var14];
|
||||
if ("cfm_creditlimit".equals(TmcBusinessBaseHelper.getBillFormId(gcBIll.getString("gsrcbilltype")))) {
|
||||
creditLimitIds.add(gcBIll.getLong("gsrcbillid"));
|
||||
|
|
@ -164,8 +157,13 @@ public class GuaranteeContractPatchPlugin extends AbstractReportListDataPluginEx
|
|||
finish = join2.on("billno", "shkd_parentbillno").select(fieldNames3, fieldNames4).finish();
|
||||
|
||||
}
|
||||
//3、注入整合后的table数据
|
||||
event.setDataSet(finish);
|
||||
//3、根据参数进行过滤和排序
|
||||
reportQueryParam = event.getReportQueryParam();
|
||||
DataSet newFinish = refreshDataSet(reportQueryParam, finish, "gm_guaranteecontract");
|
||||
|
||||
//4、注入整合后的table数据
|
||||
event.setDataSet(newFinish);
|
||||
|
||||
}
|
||||
|
||||
public DataSet buildDataByObjCollection(DynamicObjectCollection finalTemp) {
|
||||
|
|
@ -229,7 +227,6 @@ public class GuaranteeContractPatchPlugin extends AbstractReportListDataPluginEx
|
|||
return finish;
|
||||
}
|
||||
|
||||
|
||||
private String containsEntity(String gSrcBillType) {
|
||||
if ("cfm_loancontractbill".equals(gSrcBillType)) {
|
||||
return gSrcBillType;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,234 @@
|
|||
package shkd.sys.sys.plugin.report;
|
||||
|
||||
import com.alibaba.excel.util.StringUtils;
|
||||
import kd.bos.algo.DataSet;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.dataentity.resource.ResManager;
|
||||
import kd.bos.entity.MainEntityType;
|
||||
import kd.bos.entity.filter.FilterField;
|
||||
import kd.bos.entity.report.ReportQueryParam;
|
||||
import kd.bos.exception.BosErrorCode;
|
||||
import kd.bos.exception.KDBizException;
|
||||
import kd.bos.form.plugin.AbstractFormPlugin;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.MetadataServiceHelper;
|
||||
import kd.bos.servicehelper.QueryServiceHelper;
|
||||
import kd.sdk.plugin.Plugin;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 动态表单插件
|
||||
*/
|
||||
public class ReportFilterAndSortUtil {
|
||||
|
||||
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
||||
private static final String KEY_AND = " and ";
|
||||
|
||||
public static DataSet refreshDataSet(ReportQueryParam reportQueryParam, DataSet dataSet, String billnumber) {
|
||||
|
||||
//表头字段排序和搜索代码---------------------
|
||||
String sortInfo = reportQueryParam.getSortInfo();//获取升降序字段
|
||||
StringBuilder sb = new StringBuilder();//拼接所有过滤条件
|
||||
//表头字段的所有过滤条件(不包含报表常用过滤条件字段)
|
||||
List<QFilter> headFilters = reportQueryParam.getFilter().getHeadFilters();
|
||||
//获取报表原始界面模型
|
||||
MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(billnumber);
|
||||
if (dataEntityType != null) {
|
||||
//遍历单头过滤条件
|
||||
for (QFilter headFilter : headFilters) {
|
||||
String property = headFilter.getProperty();//字段表头头标识
|
||||
Object value = headFilter.getValue();//过滤值
|
||||
String cp = headFilter.getCP();//比较类型 “=”、“like”
|
||||
FilterField filterField = FilterField.create(dataEntityType, property);
|
||||
String refEntityId = filterField.getRefEntityId();//字段所引用的实体对象
|
||||
if (StringUtils.isNotBlank(refEntityId)) {
|
||||
QFilter qFilter = new QFilter("name", cp, value);
|
||||
DynamicObjectCollection datas = QueryServiceHelper.query(refEntityId, "id", new QFilter[]{qFilter});
|
||||
//根据条件查询符合条件的id
|
||||
List<Object> ids = datas.stream().map(v -> v.get("id")).collect(Collectors.toList());
|
||||
if (ids.size() > 0) {
|
||||
//拼接条件,如果是集合,集合转String后要将 [] 替换成 (),多个后面还需要拼接KEY_AND
|
||||
sb.append(property).append(" in ").append(ids.toString().replace("[", "(").replace("]", ")")).append(KEY_AND);
|
||||
} else {
|
||||
//如果符合条件的id没有,说明符合条件的数据也没有,个人想法暂时默认给id一个值,如果是直接跟字符串比较,可能会报错
|
||||
sb.append(property).append(" = 1 and ");
|
||||
}
|
||||
} else {
|
||||
int fieldType = filterField.getFieldType();//字段类型
|
||||
if (fieldType == 91) {//日期字段搜索过滤
|
||||
dateFilterStr(sb, headFilter, property, value, cp);
|
||||
} else if (fieldType == -9) {
|
||||
//文本为空 不为空处理
|
||||
if (StringUtils.equals(cp, "is null")) {
|
||||
if (headFilters.size() > 1) {
|
||||
sb.append(headFilter.toString()).append(KEY_AND);
|
||||
} else {
|
||||
sb.append(headFilter.toString().replace("(", "").replace(")", "")).append(KEY_AND);
|
||||
}
|
||||
} else {
|
||||
sb.append(headFilter.toString()).append(KEY_AND);
|
||||
}
|
||||
} else {
|
||||
//如果不是基础资料类型的字段,需要重新根据字段类型转换过滤值
|
||||
QFilter qFilterBySqlTypes = getQFilterBySqlTypes(property, cp, fieldType, value.toString());
|
||||
sb.append(qFilterBySqlTypes.toString()).append(KEY_AND);
|
||||
}
|
||||
}
|
||||
}
|
||||
String sbStr = sb.toString();
|
||||
String filterStr = StringUtils.isNotBlank(sbStr) ? sbStr.substring(0, sbStr.length() - 5).replace("null ''", "null ") : null;
|
||||
if (StringUtils.isNotBlank(filterStr)) {//搜索过滤
|
||||
dataSet = dataSet.copy().filter(filterStr);
|
||||
}
|
||||
if (StringUtils.isNotBlank(sortInfo)) {//字段排序
|
||||
dataSet = dataSet.copy().orderBy(new String[]{sortInfo});
|
||||
}
|
||||
}
|
||||
return dataSet;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sb
|
||||
* @param headFilter
|
||||
* @param property
|
||||
* @param value
|
||||
* @param cp
|
||||
* @return void
|
||||
* @Description 日期字段搜索过滤
|
||||
*/
|
||||
private static void dateFilterStr(StringBuilder sb, QFilter headFilter, String property, Object value, String cp) {
|
||||
if (value.getClass().getSimpleName().equals("Date")) { //日期类型
|
||||
Date startDate = (Date) value;
|
||||
int startInt = Integer.valueOf(sdf.format(startDate));
|
||||
//日期过滤需要转出Int类型再比较
|
||||
sb.append(" Cast(to_char(").append(property).append(",'yyyyMMdd') as Integer) ").append(cp).append(" ").append(startInt).append(KEY_AND);
|
||||
List<QFilter.QFilterNest> nests = headFilter.getNests(true);//合并条件
|
||||
for (QFilter.QFilterNest nest : nests) {//拼接合并过滤条件
|
||||
String nestProperty = nest.getFilter().getProperty();
|
||||
String nestCP = nest.getFilter().getCP();
|
||||
Date endDate = (Date) nest.getFilter().getValue();
|
||||
int endInt = Integer.valueOf(sdf.format(endDate));
|
||||
sb.append(" Cast(to_char(").append(nestProperty).append(",'yyyyMMdd') as Integer) ").append(nestCP).append(" ").append(endInt).append(KEY_AND);
|
||||
}
|
||||
} else if (value.getClass().getSimpleName().equals("String")) { //等于具体某一天 是字符串
|
||||
int start = Integer.valueOf(((String) value).replace("-", ""));
|
||||
sb.append(" Cast(to_char(").append(property).append(",'yyyyMMdd') as Integer) ").append(cp).append(" ").append(start).append(KEY_AND);
|
||||
}
|
||||
}
|
||||
|
||||
private static QFilter getQFilterBySqlTypes(String sFilter, String operater, int fieldType, String value) {
|
||||
QFilter qFilter = null;
|
||||
if (fieldType == 1) {//复选框
|
||||
String[] split = ((String) value).replace("[", "").replace("]", "").split(",");
|
||||
List<Boolean> bList = new ArrayList<>(2);
|
||||
for (String s : split) {
|
||||
if (s.trim().equals("0")) {
|
||||
bList.add(false);
|
||||
} else if (s.trim().equals("1")) {
|
||||
bList.add(true);
|
||||
}
|
||||
}
|
||||
qFilter = new QFilter(sFilter, operater, bList);
|
||||
} else if (fieldType == 5) {
|
||||
qFilter = new QFilter(sFilter, operater, parseShort(value));
|
||||
} else if (fieldType == -6) {
|
||||
qFilter = new QFilter(sFilter, operater, parseByte(value));
|
||||
} else if (fieldType == 4) {
|
||||
qFilter = new QFilter(sFilter, operater, parseInt(value));
|
||||
} else if (fieldType == -5) {
|
||||
qFilter = new QFilter(sFilter, operater, parseLong(value));
|
||||
} else if (fieldType == 7) {
|
||||
qFilter = new QFilter(sFilter, operater, parseBigDecimal(value));
|
||||
} else if (fieldType == 12) {//下拉选项
|
||||
String[] split = ((String) value).replace("[", "").replace("]", "").split(",");
|
||||
qFilter = new QFilter(sFilter, operater, split);
|
||||
} else if (fieldType != 6 && fieldType != 8) {
|
||||
if (fieldType != 3 && fieldType != 2) {
|
||||
if (fieldType == -7) {
|
||||
qFilter = new QFilter(sFilter, operater, parseBoolean(value));
|
||||
} else {
|
||||
qFilter = new QFilter(sFilter, operater, value);
|
||||
}
|
||||
} else {
|
||||
qFilter = new QFilter(sFilter, operater, parseBigDecimal(value));
|
||||
}
|
||||
} else {
|
||||
qFilter = new QFilter(sFilter, operater, parseBigDecimal(value));
|
||||
}
|
||||
|
||||
return qFilter;
|
||||
|
||||
}
|
||||
|
||||
public static short parseShort(String value) {
|
||||
try {
|
||||
return Short.parseShort(value);
|
||||
} catch (NumberFormatException var2) {
|
||||
throw new KDBizException(BosErrorCode.filterSqlBuilder, new Object[]{ResManager.loadKDString("输入内容不在-32768到32767之间", "this_0", "bos-entity-core", new Object[0])});
|
||||
}
|
||||
}
|
||||
|
||||
public static byte parseByte(String value) {
|
||||
try {
|
||||
return Byte.parseByte(value);
|
||||
} catch (NumberFormatException var2) {
|
||||
throw new KDBizException(BosErrorCode.filterSqlBuilder, new Object[]{ResManager.loadKDString("输入内容不在-128到127之间", "this_1", "bos-entity-core", new Object[0])});
|
||||
}
|
||||
}
|
||||
|
||||
public static int parseInt(String value) {
|
||||
try {
|
||||
return Integer.parseInt(value);
|
||||
} catch (NumberFormatException var2) {
|
||||
throw new KDBizException(BosErrorCode.filterSqlBuilder, new Object[]{ResManager.loadKDString("输入内容不在-2147483648到2147483647之间", "this_2", "bos-entity-core", new Object[0])});
|
||||
}
|
||||
}
|
||||
|
||||
public static long parseLong(String value) {
|
||||
try {
|
||||
return Long.parseLong(value);
|
||||
} catch (NumberFormatException var2) {
|
||||
throw new KDBizException(BosErrorCode.filterSqlBuilder, new Object[]{ResManager.loadKDString("输入内容不在-9223372036854775808到9223372036854775807之间", "this_3", "bos-entity-core", new Object[0])});
|
||||
}
|
||||
}
|
||||
|
||||
public static float parseFloat(String value) {
|
||||
try {
|
||||
return Float.parseFloat(value);
|
||||
} catch (NumberFormatException var2) {
|
||||
throw new KDBizException(BosErrorCode.filterSqlBuilder, new Object[]{ResManager.loadKDString("不是有效的浮点数", "this_4", "bos-entity-core", new Object[0])});
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static double parseDouble(String value) {
|
||||
try {
|
||||
return Double.parseDouble(value);
|
||||
} catch (NumberFormatException var2) {
|
||||
throw new KDBizException(BosErrorCode.filterSqlBuilder, new Object[]{ResManager.loadKDString("不是有效的双精度数字", "this_5", "bos-entity-core", new Object[0])});
|
||||
}
|
||||
}
|
||||
|
||||
public static BigDecimal parseBigDecimal(String value) {
|
||||
try {
|
||||
return new BigDecimal(value);
|
||||
} catch (NumberFormatException var2) {
|
||||
throw new KDBizException(BosErrorCode.filterSqlBuilder, new Object[]{ResManager.loadKDString("不是有效的双精度数字", "this_5", "bos-entity-core", new Object[0])});
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean parseBoolean(String value) {
|
||||
try {
|
||||
return Boolean.parseBoolean(value);
|
||||
} catch (NumberFormatException var2) {
|
||||
throw new KDBizException(BosErrorCode.filterSqlBuilder, new Object[]{ResManager.loadKDString("不是有效的布尔类型", "this_6", "bos-entity-core", new Object[0])});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue