提交人:陈绍鑫

日期:2025/4/11 11:30
内容:金融统计报表优化
This commit is contained in:
陈绍鑫 2025-04-11 11:32:05 +08:00
parent 40b4daf4cf
commit 912a3e8379
2 changed files with 123 additions and 13 deletions

View File

@ -3,6 +3,7 @@ package shkd.sys.sys.plugin.report;
import com.alibaba.fastjson.JSONObject;
import kd.bos.bill.BillShowParameter;
import kd.bos.bill.OperationStatus;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.entity.LocaleString;
@ -25,9 +26,11 @@ import kd.bos.mvc.form.FormView;
import kd.bos.mvc.report.ReportView;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.permission.api.HasPermOrgResult;
import kd.bos.report.ReportList;
import kd.bos.report.ReportShowParameter;
import kd.bos.report.events.CreateColumnEvent;
import kd.bos.report.events.CreateFilterInfoEvent;
import kd.bos.report.events.SortAndFilterEvent;
import kd.bos.report.filter.ReportFilter;
import kd.bos.report.plugin.AbstractReportFormPlugin;
@ -35,18 +38,27 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.bos.servicehelper.org.OrgUnitServiceHelper;
import kd.bos.servicehelper.org.OrgViewType;
import kd.bos.servicehelper.permission.PermissionServiceHelper;
import org.apache.commons.lang3.time.DateUtils;
import shkd.sys.sys.plugin.report.domain.FinanceVarietyEnum;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
public class FinanceReportFormPlugin extends AbstractReportFormPlugin implements HyperLinkClickListener {
@Override
public void packageData(PackageDataEvent evt) {
if ("shkd_org".equals(((ReportColumn)evt.getSource()).getFieldKey())){
String formatValue = (String)evt.getFormatValue();
DynamicObject selorg = QueryServiceHelper.queryOne("bos_org", "id,name,number", (new QFilter("name", QCP.equals, formatValue)).toArray());
if (selorg==null){
evt.getNoLinkKey().add(((ReportColumn)evt.getSource()).getFieldKey());
return;
}
Long pkValue = selorg.getLong("id");
List<Long> orgIds = new ArrayList<>(1);
orgIds.add(pkValue);
@ -106,6 +118,8 @@ public class FinanceReportFormPlugin extends AbstractReportFormPlugin implement
ReportShowParameter parameter = new ReportShowParameter();
parameter.setCustomParam("shkd_selorg",single.getLong("id"));
parameter.setCustomParam("shkd_seldate",this.getModel().getValue("shkd_seldate"));
parameter.setCustomParam("shkd_selmoney",this.getModel().getValue("shkd_selmoney"));
parameter.setCustomParam("shkd_isone",false);
parameter.setFormId("shkd_financereport");
parameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
this.getView().showForm(parameter);
@ -113,9 +127,45 @@ public class FinanceReportFormPlugin extends AbstractReportFormPlugin implement
}
@Override
public void beforeCreateFilterInfo(CreateFilterInfoEvent event) {
super.beforeCreateFilterInfo(event);
System.out.println(666);
}
// @Override
// protected void filterContainerInit(FilterContainerInitEvent contInitEvent, ReportQueryParam queryParam) {
// FilterColumn orgFilter = contInitEvent.getFilterColumn("shkd_seluserpower");
// }
@Override
protected void filterContainerInit(FilterContainerInitEvent contInitEvent, ReportQueryParam queryParam) {
super.filterContainerInit(contInitEvent, queryParam);
FilterColumn orgFilter = contInitEvent.getFilterColumn("shkd_seluserpower");
}
@Override
public void initDefaultQueryParam(ReportQueryParam queryParam) {
super.initDefaultQueryParam(queryParam);
Boolean shkd_isone = (Boolean) this.getModel().getValue("shkd_isone");//是否在第一层
HasPermOrgResult userHasPermOrgs = PermissionServiceHelper.getUserHasPermOrgs(Long.parseLong(RequestContext.get().getUserId()));
//有权的组织
List<Long> hasPermOrgs = userHasPermOrgs.getHasPermOrgs();
if (hasPermOrgs.size()==0){
this.getModel().setValue("shkd_seluserpower", null);
}else if (hasPermOrgs.size()!=0&&shkd_isone){//有组织权限隔离且在首层
//获取有权组织里级别高的根节点组织
List<Long> res=getSuperOrg(hasPermOrgs);
Object[] longs = res.toArray(new Long[0]);
this.getModel().setValue("shkd_seluserpower", longs);
}else if (hasPermOrgs.size()!=0&&!shkd_isone){//有组织权限隔离但不在首层
this.getModel().setValue("shkd_seluserpower", null);
}
//是否全部组织有权
boolean hasallOrg = userHasPermOrgs.hasAllOrgPerm();
}
@Override
@ -124,9 +174,14 @@ public class FinanceReportFormPlugin extends AbstractReportFormPlugin implement
ReportShowParameter formShowParameter = (ReportShowParameter) this.getView().getFormShowParameter();
Object shkd_selorg = formShowParameter.getCustomParam("shkd_selorg");
Object shkd_seldate = formShowParameter.getCustomParam("shkd_seldate");
Object shkd_selmoney = formShowParameter.getCustomParam("shkd_selmoney");
Object shkd_isone = formShowParameter.getCustomParam("shkd_isone");
if (shkd_selorg != null) {
this.getModel().setValue("shkd_selorg", shkd_selorg);
this.getModel().setValue("shkd_seldate", shkd_seldate);
this.getModel().setValue("shkd_selmoney", shkd_selmoney);
this.getModel().setValue("shkd_isone", shkd_isone);
this.getModel().setValue("shkd_seluserpower", null);
ReportFilter filter = this.getView().getControl("reportfilterap");//调用页面的自动查询
filter.search();
}
@ -305,17 +360,54 @@ public class FinanceReportFormPlugin extends AbstractReportFormPlugin implement
//按字段 组织配置 排序
Collections.sort(rowData , new Comparator<DynamicObject>(){
@Override
public int compare(DynamicObject dynamicObject1, DynamicObject dynamicObject2) {
return (map.get(dynamicObject1.getString("shkd_orgnumber"))==null?100:map.get(dynamicObject1.getString("shkd_orgnumber")))-(map.get(dynamicObject2.getString("shkd_orgnumber"))==null?100:map.get(dynamicObject2.getString("shkd_orgnumber")));
// return dynamicObject1.getInt("menuindex")-dynamicObject2.getInt("menuindex");
}
});
//添加集团内债务融资未抵消合计行
addheji(rowData);
}
private void addheji(DynamicObjectCollection rowData){
BigDecimal shkd_jtnbjkamount=new BigDecimal(0);//集团内部借款金额
BigDecimal shkd_jtnbjkrzcb=new BigDecimal(0);//集团内部借款融资成本(%)
BigDecimal shkd_jtnbjkqx=new BigDecimal(0);//集团内部借款期限
for (DynamicObject rowDatum : rowData) {
shkd_jtnbjkamount.subtract(rowDatum.getBigDecimal("shkd_jtnbjkamount"));
shkd_jtnbjkrzcb.subtract(rowDatum.getBigDecimal("shkd_jtnbjkrzcb"));
shkd_jtnbjkqx.subtract(rowDatum.getBigDecimal("shkd_jtnbjkqx"));
}
DynamicObject dynamicObject = new DynamicObject(rowData.getDynamicObjectType());
dynamicObject.set("shkd_org","合并抵消");
dynamicObject.set("shkd_jtnbjkamount",shkd_jtnbjkamount);
dynamicObject.set("shkd_jtnbjkrzcb",shkd_jtnbjkrzcb);
dynamicObject.set("shkd_jtnbjkqx",shkd_jtnbjkqx);
rowData.add(dynamicObject);
}
private List<Long> getSuperOrg(List<Long> org){
//组织和其对应直接上级
Map<Long, Long> map = new HashMap();
map=OrgUnitServiceHelper.getDirectSuperiorOrg(OrgViewType.OrgUnit, org);
Set<Long> existingOrgs = new HashSet<>(map.keySet());
// 2. 遍历 map检查每个组织 a 的上级是否存在于 existingOrgs
List<Long> result = new ArrayList<>();
for (Long orgId : map.keySet()) {
Long superior = map.get(orgId); // 获取当前组织的上级
if (superior == null || !existingOrgs.contains(superior)) {
// 如果上级不存在或为 null则保留当前组织
result.add(orgId);
}
// 否则上级存在不加入 result相当于删除
}
List<Long> longs = new ArrayList<>(result);
return longs;
}
}

View File

@ -3,11 +3,13 @@ package shkd.sys.sys.plugin.report;
import kd.bos.algo.DataSet;
import kd.bos.algo.JoinDataSet;
import kd.bos.algo.JoinType;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.entity.LocaleString;
import kd.bos.db.DB;
import kd.bos.db.DBRoute;
import kd.bos.entity.AppMetadataCache;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.report.*;
import kd.bos.entity.tree.TreeNode;
@ -18,11 +20,14 @@ import kd.bos.org.model.OrgTreeParam;
import kd.bos.orm.ORM;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.permission.api.HasPermOrgResult;
import kd.bos.permission.cache.constant.PermItemConst;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.MetadataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.bos.servicehelper.org.OrgUnitServiceHelper;
import kd.bos.servicehelper.org.OrgViewType;
import kd.bos.servicehelper.permission.PermissionServiceHelper;
import kd.bos.util.CollectionUtils;
import shkd.sys.sys.plugin.form.PaymentProcessingBillPlugin;
import shkd.sys.sys.plugin.report.domain.FinanceVarietyEnum;
@ -66,6 +71,7 @@ public class FinanceReportPlugin extends AbstractReportListDataPlugin {
List<String> dateList = new ArrayList<>();
DynamicObject selorgDy = null;
Double shkd_selmoney=0.0;
DynamicObjectCollection shkd_seluserpower=null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (QFilter filter : listQFilter) {
if (filter.getProperty().contains("shkd_selorg")) {
@ -74,11 +80,27 @@ public class FinanceReportPlugin extends AbstractReportListDataPlugin {
dateList.add(sdf.format(filter.getValue()));
} else if (filter.getProperty().contains("shkd_selmoney")) {
shkd_selmoney= Double.parseDouble((String) filter.getValue());
}else if (filter.getProperty().contains("shkd_seluserpower")){
shkd_seluserpower=(DynamicObjectCollection) filter.getValue();
}
}
HashMap<Long, List<Long>> map = new HashMap<>();//组织层级关系
//如果有组织则单独处理没有则走getOrgrelate方法
if (shkd_seluserpower==null){
getOrgrelate(map, selorgDy);
}else {
for (DynamicObject dynamicObject : shkd_seluserpower) {
Long id = dynamicObject.getLong("id");//业务单元id
List<Long> orgIds = new ArrayList<>(1);
orgIds.add(id);
//获取该组织的全部下级业务单元
List<Long> allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.OrgUnit, orgIds, true);//包括自己
map.put(id,allSubordinateOrgs);
}
}
//根据组织关系配置sql
StringBuilder sqlBuilder = new StringBuilder("/*dialect*/ ");
int size = map.size();
@ -102,6 +124,7 @@ public class FinanceReportPlugin extends AbstractReportListDataPlugin {
DataSet res = DB.queryDataSet(this.getClass().getSimpleName(), DBRoute.of("fi"), sqlBuilder.toString());//财务云
//业务单元数据集
DataSet balanceDataSet = QueryServiceHelper.queryDataSet(this.getClass().getSimpleName(),"bos_org","id,number as shkd_orgnumber,name as shkd_org", null, null);
@ -348,11 +371,6 @@ public class FinanceReportPlugin extends AbstractReportListDataPlugin {
orgIds.add(id);
//获取该组织的全部下级业务单元
List<Long> allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.OrgUnit, orgIds, true);//包括自己
// OrgTreeParam param = new OrgTreeParam();
// param.setId(id);
// param.setOrgViewNumber(OrgViewType.OrgUnit);
// Map<String, Object> treeRootNodeMapById = OrgUnitServiceHelper.getTreeRootNodeMapById(param);
// Boolean isleaf = (Boolean) treeRootNodeMapById.get("isleaf");
map.put(id,allSubordinateOrgs);
}
return map;